All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.http.HttpConfig Maven / Gradle / Ivy

Go to download

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

There is a newer version: 5.8.34
Show newest version
package cn.hutool.http;

import cn.hutool.core.lang.Assert;
import cn.hutool.core.net.SSLUtil;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSocketFactory;
import java.net.InetSocketAddress;
import java.net.Proxy;

/**
 * Http配置项
 *
 * @author looly
 * @since 5.8.0
 */
public class HttpConfig {

	/**
	 * 创建默认Http配置信息
	 *
	 * @return HttpConfig
	 */
	public static HttpConfig create() {
		return new HttpConfig();
	}

	/**
	 * 默认连接超时
	 */
	int connectionTimeout = HttpGlobalConfig.getTimeout();
	/**
	 * 默认读取超时
	 */
	int readTimeout = HttpGlobalConfig.getTimeout();

	/**
	 * 是否禁用缓存
	 */
	boolean isDisableCache;

	/**
	 * 最大重定向次数
	 */
	int maxRedirectCount = HttpGlobalConfig.getMaxRedirectCount();

	/**
	 * 代理
	 */
	Proxy proxy;

	/**
	 * HostnameVerifier,用于HTTPS安全连接
	 */
	HostnameVerifier hostnameVerifier;
	/**
	 * SSLSocketFactory,用于HTTPS安全连接
	 */
	SSLSocketFactory ssf;

	/**
	 * Chuncked块大小,0或小于0表示不设置Chuncked模式
	 */
	int blockSize;

	/**
	 * 获取是否忽略响应读取时可能的EOF异常。
* 在Http协议中,对于Transfer-Encoding: Chunked在正常情况下末尾会写入一个Length为0的的chunk标识完整结束。
* 如果服务端未遵循这个规范或响应没有正常结束,会报EOF异常,此选项用于是否忽略这个异常。 */ boolean ignoreEOFError = HttpGlobalConfig.isIgnoreEOFError(); /** * 获取是否忽略解码URL,包括URL中的Path部分和Param部分。
* 在构建Http请求时,用户传入的URL可能有编码后和未编码的内容混合在一起,如果此参数为{@code true},则会统一解码编码后的参数,
* 按照RFC3986规范,在发送请求时,全部编码之。如果为{@code false},则不会解码已经编码的内容,在请求时只编码需要编码的部分。 */ boolean decodeUrl = HttpGlobalConfig.isDecodeUrl(); /** * 请求前的拦截器,用于在请求前重新编辑请求 */ final HttpInterceptor.Chain requestInterceptors = GlobalInterceptor.INSTANCE.getCopiedRequestInterceptor(); /** * 响应后的拦截器,用于在响应后处理逻辑 */ final HttpInterceptor.Chain responseInterceptors = GlobalInterceptor.INSTANCE.getCopiedResponseInterceptor(); /** * 重定向时是否使用拦截器 */ boolean interceptorOnRedirect; /** * 自动重定向时是否处理cookie */ boolean followRedirectsCookie; /** * 设置超时,单位:毫秒
* 超时包括: * *
	 * 1. 连接超时
	 * 2. 读取响应超时
	 * 
* * @param milliseconds 超时毫秒数 * @return this * @see #setConnectionTimeout(int) * @see #setReadTimeout(int) */ public HttpConfig timeout(int milliseconds) { setConnectionTimeout(milliseconds); setReadTimeout(milliseconds); return this; } /** * 设置连接超时,单位:毫秒 * * @param milliseconds 超时毫秒数 * @return this */ public HttpConfig setConnectionTimeout(int milliseconds) { this.connectionTimeout = milliseconds; return this; } /** * 设置连接超时,单位:毫秒 * * @param milliseconds 超时毫秒数 * @return this */ public HttpConfig setReadTimeout(int milliseconds) { this.readTimeout = milliseconds; return this; } /** * 禁用缓存 * * @return this */ public HttpConfig disableCache() { this.isDisableCache = true; return this; } /** * 设置最大重定向次数
* 如果次数小于1则表示不重定向,大于等于1表示打开重定向 * * @param maxRedirectCount 最大重定向次数 * @return this */ public HttpConfig setMaxRedirectCount(int maxRedirectCount) { this.maxRedirectCount = Math.max(maxRedirectCount, 0); return this; } /** * 设置域名验证器
* 只针对HTTPS请求,如果不设置,不做验证,所有域名被信任 * * @param hostnameVerifier HostnameVerifier * @return this */ public HttpConfig setHostnameVerifier(HostnameVerifier hostnameVerifier) { // 验证域 this.hostnameVerifier = hostnameVerifier; return this; } /** * 设置Http代理 * * @param host 代理 主机 * @param port 代理 端口 * @return this */ public HttpConfig setHttpProxy(String host, int port) { final Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port)); return setProxy(proxy); } /** * 设置代理 * * @param proxy 代理 {@link Proxy} * @return this */ public HttpConfig setProxy(Proxy proxy) { this.proxy = proxy; return this; } /** * 设置SSLSocketFactory
* 只针对HTTPS请求,如果不设置,使用默认的SSLSocketFactory
* 默认SSLSocketFactory为:SSLSocketFactoryBuilder.create().build(); * * @param ssf SSLScketFactory * @return this */ public HttpConfig setSSLSocketFactory(SSLSocketFactory ssf) { this.ssf = ssf; return this; } /** * 设置HTTPS安全连接协议,只针对HTTPS请求,可以使用的协议包括:
* 此方法调用后{@link #setSSLSocketFactory(SSLSocketFactory)} 将被覆盖。 * *
	 * 1. TLSv1.2
	 * 2. TLSv1.1
	 * 3. SSLv3
	 * ...
	 * 
* * @param protocol 协议 * @return this * @see SSLUtil#createSSLContext(String) * @see #setSSLSocketFactory(SSLSocketFactory) */ public HttpConfig setSSLProtocol(String protocol) { Assert.notBlank(protocol, "protocol must be not blank!"); setSSLSocketFactory(SSLUtil.createSSLContext(protocol).getSocketFactory()); return this; } /** * 采用流方式上传数据,无需本地缓存数据。
* HttpUrlConnection默认是将所有数据读到本地缓存,然后再发送给服务器,这样上传大文件时就会导致内存溢出。 * * @param blockSize 块大小(bytes数),0或小于0表示不设置Chuncked模式 * @return this */ public HttpConfig setBlockSize(int blockSize) { this.blockSize = blockSize; return this; } /** * 设置是否忽略响应读取时可能的EOF异常。
* 在Http协议中,对于Transfer-Encoding: Chunked在正常情况下末尾会写入一个Length为0的的chunk标识完整结束。
* 如果服务端未遵循这个规范或响应没有正常结束,会报EOF异常,此选项用于是否忽略这个异常。 * * @param ignoreEOFError 是否忽略响应读取时可能的EOF异常。 * @return this * @since 5.7.20 */ public HttpConfig setIgnoreEOFError(boolean ignoreEOFError) { this.ignoreEOFError = ignoreEOFError; return this; } /** * 设置是否忽略解码URL,包括URL中的Path部分和Param部分。
* 在构建Http请求时,用户传入的URL可能有编码后和未编码的内容混合在一起,如果此参数为{@code true},则会统一解码编码后的参数,
* 按照RFC3986规范,在发送请求时,全部编码之。如果为{@code false},则不会解码已经编码的内容,在请求时只编码需要编码的部分。 * * @param decodeUrl 是否忽略解码URL * @return this */ public HttpConfig setDecodeUrl(boolean decodeUrl) { this.decodeUrl = decodeUrl; return this; } /** * 设置拦截器,用于在请求前重新编辑请求 * * @param interceptor 拦截器实现 * @return this */ public HttpConfig addRequestInterceptor(HttpInterceptor interceptor) { this.requestInterceptors.addChain(interceptor); return this; } /** * 设置拦截器,用于在请求前重新编辑请求 * * @param interceptor 拦截器实现 * @return this */ public HttpConfig addResponseInterceptor(HttpInterceptor interceptor) { this.responseInterceptors.addChain(interceptor); return this; } /** * 重定向时是否使用拦截器 * * @param interceptorOnRedirect 重定向时是否使用拦截器 * @return this */ public HttpConfig setInterceptorOnRedirect(boolean interceptorOnRedirect) { this.interceptorOnRedirect = interceptorOnRedirect; return this; } /** * 自动重定向时是否处理cookie * * @param followRedirectsCookie 自动重定向时是否处理cookie * @return this * @since 5.8.15 */ public HttpConfig setFollowRedirectsCookie(boolean followRedirectsCookie) { this.followRedirectsCookie = followRedirectsCookie; return this; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy