add method

This commit is contained in:
Looly 2022-02-23 02:51:04 +08:00
parent 1bfbc480c8
commit f93f755885
6 changed files with 52 additions and 16 deletions

View File

@ -2,7 +2,7 @@
# 🚀Changelog
-------------------------------------------------------------------------------------------------------------
# 5.7.22 (2022-02-22)
# 5.7.22 (2022-02-23)
### 🐣新特性
* 【poi 】 ExcelUtil.readBySax增加对POI-5.2.0的兼容性issue#I4TJF4@gitee
@ -13,6 +13,7 @@
* 【core 】 CheckedUtil删除第二个参数为RuntimeException的方法
* 【core 】 FileUtil增加getTotalLines方法
* 【db 】 MetaUtil增加getTableMeta重载issue#2157@Github
* 【http 】 增加HttpGlobalConfig.setDecodeUrlissue#I4U8YQ@Gitee
### 🐞Bug修复
* 【cache 】 修复ReentrantCache.toString方法线程不安全问题issue#2140@Github

View File

@ -24,6 +24,11 @@ import java.util.Map.Entry;
@SuppressWarnings("unchecked")
public abstract class HttpBase<T> {
/**
* 默认的请求编码URL的encodedecode编码
*/
protected static final Charset DEFAULT_CHARSET = CharsetUtil.CHARSET_UTF_8;
/**
* HTTP/1.0
*/
@ -40,7 +45,7 @@ public abstract class HttpBase<T> {
/**
* 编码
*/
protected Charset charset = CharsetUtil.CHARSET_UTF_8;
protected Charset charset = DEFAULT_CHARSET;
/**
* http版本
*/

View File

@ -33,6 +33,7 @@ public class HttpGlobalConfig implements Serializable {
private static String boundary = "--------------------Hutool_" + RandomUtil.randomString(16);
private static int maxRedirectCount = 0;
private static boolean ignoreEOFError = true;
private static boolean decodeUrl = false;
/**
* 获取全局默认的超时时长
@ -124,12 +125,36 @@ public class HttpGlobalConfig implements Serializable {
ignoreEOFError = customIgnoreEOFError;
}
/**
* 获取是否忽略解码URL包括URL中的Path部分和Param部分<br>
* 在构建Http请求时用户传入的URL可能有编码后和未编码的内容混合在一起如果此参数为{@code true}则会统一解码编码后的参数<br>
* 按照RFC3986规范在发送请求时全部编码之如果为{@code false}则不会解码已经编码的内容在请求时只编码需要编码的部分
*
* @return 是否忽略解码URL
* @since 5.7.22
*/
public static boolean isDecodeUrl() {
return decodeUrl;
}
/**
* 设置是否忽略解码URL包括URL中的Path部分和Param部分<br>
* 在构建Http请求时用户传入的URL可能有编码后和未编码的内容混合在一起如果此参数为{@code true}则会统一解码编码后的参数<br>
* 按照RFC3986规范在发送请求时全部编码之如果为{@code false}则不会解码已经编码的内容在请求时只编码需要编码的部分
*
* @param customDecodeUrl 是否忽略解码URL
* @since 5.7.22
*/
synchronized public static void setDecodeUrl(boolean customDecodeUrl) {
decodeUrl = customDecodeUrl;
}
/**
* 获取Cookie管理器用于自定义Cookie管理
*
* @return {@link CookieManager}
* @since 4.1.0
* @see GlobalCookieManager#getCookieManager()
* @since 4.1.0
*/
public static CookieManager getCookieManager() {
return GlobalCookieManager.getCookieManager();
@ -139,8 +164,8 @@ public class HttpGlobalConfig implements Serializable {
* 自定义{@link CookieManager}
*
* @param customCookieManager 自定义的{@link CookieManager}
* @since 4.5.14
* @see GlobalCookieManager#setCookieManager(CookieManager)
* @since 4.5.14
*/
synchronized public static void setCookieManager(CookieManager customCookieManager) {
GlobalCookieManager.setCookieManager(customCookieManager);
@ -149,8 +174,8 @@ public class HttpGlobalConfig implements Serializable {
/**
* 关闭Cookie
*
* @since 4.1.9
* @see GlobalCookieManager#setCookieManager(CookieManager)
* @since 4.1.9
*/
synchronized public static void closeCookie() {
GlobalCookieManager.setCookieManager(null);
@ -164,7 +189,7 @@ public class HttpGlobalConfig implements Serializable {
* @since 5.7.4
*/
synchronized public static void allowPatch() {
if(isAllowPatch){
if (isAllowPatch) {
return;
}
final Field methodsField = ReflectUtil.getField(HttpURLConnection.class, "methods");
@ -181,7 +206,7 @@ public class HttpGlobalConfig implements Serializable {
// 检查注入是否成功
final Object staticFieldValue = ReflectUtil.getStaticFieldValue(methodsField);
if(false == ArrayUtil.equals(methods, staticFieldValue)){
if (false == ArrayUtil.equals(methods, staticFieldValue)) {
throw new HttpException("Inject value to field [methods] failed!");
}

View File

@ -12,7 +12,6 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.net.SSLUtil;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.body.BytesBody;
@ -129,18 +128,24 @@ public class HttpRequest extends HttpBase<HttpRequest> {
}
/**
* 构建一个HTTP请求
* 构建一个HTTP请求<br>
* 对于传入的URL可以自定义是否解码已经编码的内容设置见{@link HttpGlobalConfig#setDecodeUrl(boolean)}<br>
* 在构建Http请求时用户传入的URL可能有编码后和未编码的内容混合在一起如果{@link HttpGlobalConfig#isDecodeUrl()}{@code true}则会统一解码编码后的参数<br>
* 按照RFC3986规范在发送请求时全部编码之如果为{@code false}则不会解码已经编码的内容在请求时只编码需要编码的部分
*
* @param url URL链接默认自动编码URL中的参数等信息
* @return HttpRequest
* @since 5.7.18
*/
public static HttpRequest of(String url) {
return of(url, CharsetUtil.CHARSET_UTF_8);
return of(url, HttpGlobalConfig.isDecodeUrl() ? DEFAULT_CHARSET : null);
}
/**
* 构建一个HTTP请求
* 构建一个HTTP请求<br>
* 对于传入的URL可以自定义是否解码已经编码的内容<br>
* 在构建Http请求时用户传入的URL可能有编码后和未编码的内容混合在一起如果charset参数不为{@code null}则会统一解码编码后的参数<br>
* 按照RFC3986规范在发送请求时全部编码之如果为{@code false}则不会解码已经编码的内容在请求时只编码需要编码的部分
*
* @param url URL链接
* @param charset 编码如果为{@code null}不自动解码编码URL
@ -266,7 +271,9 @@ public class HttpRequest extends HttpBase<HttpRequest> {
* 构造URL编码默认使用UTF-8
*
* @param url URL
* @deprecated 请使用 {@link #of(String)}
*/
@Deprecated
public HttpRequest(String url) {
this(UrlBuilder.ofHttp(url));
}

View File

@ -75,7 +75,7 @@ public class HttpUtil {
* @since 3.0.9
*/
public static HttpRequest createRequest(Method method, String url) {
return new HttpRequest(url).method(method);
return HttpRequest.of(url).method(method);
}
/**

View File

@ -3,7 +3,6 @@ package cn.hutool.http;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Console;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ReUtil;
import org.junit.Assert;
@ -357,11 +356,10 @@ public class HttpUtilTest {
@Test
@Ignore
public void getPicTest(){
HttpGlobalConfig.setDecodeUrl(false);
String url = "https://p3-sign.douyinpic.com/tos-cn-i-0813/f41afb2e79a94dcf80970affb9a69415~noop.webp?x-expires=1647738000&x-signature=%2Br1ekUCGjXiu50Y%2Bk0MO4ovulK8%3D&from=4257465056&s=PackSourceEnum_DOUYIN_REFLOW&se=false&sh=&sc=&l=2022021809224601020810013524310DD3&biz_tag=aweme_images";
final String s = UrlBuilder.ofHttp(url).toString();
// Assert.assertEquals(url, s);
final HttpRequest request = HttpRequest.of(url, null).method(Method.GET);
final HttpRequest request = HttpRequest.of(url).method(Method.GET);
Console.log(request.execute().body());
}
}