Merge remote-tracking branch 'upstream/v5-dev' into v5-dev

This commit is contained in:
totalo
2020-10-21 23:09:40 +08:00
64 changed files with 800 additions and 180 deletions

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>cn.hutool</groupId>
<artifactId>hutool-parent</artifactId>
<version>5.4.5-SNAPSHOT</version>
<version>5.4.6-SNAPSHOT</version>
</parent>
<artifactId>hutool-http</artifactId>

View File

@@ -9,9 +9,19 @@ public enum Header {
//------------------------------------------------------------- 通用头域
/**
* 提供验证头
* 提供验证头,例如:
* <pre>
* Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
* </pre>
*/
AUTHORIZATION("Authorization"),
/**
* 提供给代理服务器的用于身份验证的凭证,例如:
* <pre>
* Proxy-Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
* </pre>
*/
PROXY_AUTHORIZATION("Proxy-Authorization"),
/**
* 提供日期和时间标志,说明报文是什么时间创建的
*/

View File

@@ -531,7 +531,7 @@ public class HttpConnection {
final URLConnection conn = openConnection();
if (false == conn instanceof HttpURLConnection) {
// 防止其它协议造成的转换异常
throw new HttpException("'{}' is not a http connection, make sure URL is format for http.", conn.getClass().getName());
throw new HttpException("'{}' of URL [{}] is not a http connection, make sure URL is format for http.", conn.getClass().getName(), this.url);
}
return (HttpURLConnection) conn;

View File

@@ -1,6 +1,5 @@
package cn.hutool.http;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IORuntimeException;
@@ -981,16 +980,32 @@ public class HttpRequest extends HttpBase<HttpRequest> {
}
/**
* 简单验证
* 简单验证,生成的头信息类似于:
* <pre>
* Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
* </pre>
*
* @param username 用户名
* @param password 密码
* @return HttpRequest
* @return this
*/
public HttpRequest basicAuth(String username, String password) {
final String data = username.concat(":").concat(password);
final String base64 = Base64.encode(data, charset);
return auth("Basic " + base64);
return auth(HttpUtil.buildBasicAuth(username, password, charset));
}
/**
* 简单代理验证,生成的头信息类似于:
* <pre>
* Proxy-Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
* </pre>
*
* @param username 用户名
* @param password 密码
* @return this
* @since 5.4.6
*/
public HttpRequest basicProxyAuth(String username, String password) {
return proxyAuth(HttpUtil.buildBasicAuth(username, password, charset));
}
/**
@@ -1005,6 +1020,18 @@ public class HttpRequest extends HttpBase<HttpRequest> {
return this;
}
/**
* 验证简单插入Authorization头
*
* @param content 验证内容
* @return HttpRequest
* @since 5.4.6
*/
public HttpRequest proxyAuth(String content) {
header(Header.PROXY_AUTHORIZATION, content, true);
return this;
}
@Override
public String toString() {
StringBuilder sb = StrUtil.builder();

View File

@@ -1,5 +1,6 @@
package cn.hutool.http;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FastByteArrayOutputStream;
import cn.hutool.core.io.FileUtil;
@@ -870,4 +871,21 @@ public class HttpUtil {
public static SimpleServer createServer(int port) {
return new SimpleServer(port);
}
/**
* 构建简单的账号秘密验证信息,构建后类似于:
* <pre>
* Basic YWxhZGRpbjpvcGVuc2VzYW1l
* </pre>
*
* @param username 账号
* @param password 密码
* @param charset 编码如果账号或密码中有非ASCII字符适用
* @return 密码验证信息
* @since 5.4.6
*/
public static String buildBasicAuth(String username, String password, Charset charset){
final String data = username.concat(":").concat(password);
return "Basic " + Base64.encode(data, charset);
}
}

View File

@@ -143,4 +143,5 @@ public class HttpRequestTest {
HttpResponse execute = get.execute();
Console.log(execute.body());
}
}