|
@@ -1,5 +1,7 @@
|
|
|
package me.chanjar.weixin.common.util.http.apache;
|
|
|
|
|
|
+import lombok.Data;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.http.HttpHost;
|
|
|
import org.apache.http.annotation.NotThreadSafe;
|
|
@@ -23,8 +25,6 @@ import org.apache.http.impl.client.HttpClients;
|
|
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
|
|
import org.apache.http.protocol.HttpContext;
|
|
|
import org.apache.http.ssl.SSLContexts;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
|
|
|
import javax.net.ssl.SSLContext;
|
|
|
import java.io.IOException;
|
|
@@ -41,26 +41,65 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
*
|
|
|
* @author kakotor
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
+@Data
|
|
|
@NotThreadSafe
|
|
|
public class DefaultApacheHttpClientBuilder implements ApacheHttpClientBuilder {
|
|
|
- protected final Logger log = LoggerFactory.getLogger(DefaultApacheHttpClientBuilder.class);
|
|
|
private final AtomicBoolean prepared = new AtomicBoolean(false);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取链接的超时时间设置
|
|
|
+ * <p>
|
|
|
+ * 设置为零时不超时,一直等待.
|
|
|
+ * 设置为负数是使用系统默认设置(非3000ms的默认值,而是httpClient的默认设置).
|
|
|
+ * </p>
|
|
|
+ */
|
|
|
private int connectionRequestTimeout = -1;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 建立链接的超时时间,默认为5000ms.由于是在链接池获取链接,此设置应该并不起什么作用
|
|
|
+ * <p>
|
|
|
+ * 设置为零时不超时,一直等待.
|
|
|
+ * 设置为负数是使用系统默认设置(非上述的5000ms的默认值,而是httpclient的默认设置).
|
|
|
+ * </p>
|
|
|
+ */
|
|
|
private int connectionTimeout = 5000;
|
|
|
+ /**
|
|
|
+ * 默认NIO的socket超时设置,默认5000ms.
|
|
|
+ */
|
|
|
private int soTimeout = 5000;
|
|
|
+ /**
|
|
|
+ * 空闲链接的超时时间,默认60000ms.
|
|
|
+ * <p>
|
|
|
+ * 超时的链接将在下一次空闲链接检查是被销毁
|
|
|
+ * </p>
|
|
|
+ */
|
|
|
private int idleConnTimeout = 60000;
|
|
|
+ /**
|
|
|
+ * 检查空间链接的间隔周期,默认60000ms.
|
|
|
+ */
|
|
|
private int checkWaitTime = 60000;
|
|
|
+ /**
|
|
|
+ * 每路的最大链接数,默认10
|
|
|
+ */
|
|
|
private int maxConnPerHost = 10;
|
|
|
+ /**
|
|
|
+ * 最大总连接数,默认50
|
|
|
+ */
|
|
|
private int maxTotalConn = 50;
|
|
|
+ /**
|
|
|
+ * 自定义httpclient的User Agent
|
|
|
+ */
|
|
|
private String userAgent;
|
|
|
- private HttpRequestRetryHandler httpRequestRetryHandler = new HttpRequestRetryHandler() {
|
|
|
+
|
|
|
+ private final HttpRequestRetryHandler httpRequestRetryHandler = new HttpRequestRetryHandler() {
|
|
|
@Override
|
|
|
public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
|
|
|
return false;
|
|
|
}
|
|
|
};
|
|
|
private SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory();
|
|
|
- private PlainConnectionSocketFactory plainConnectionSocketFactory = PlainConnectionSocketFactory.getSocketFactory();
|
|
|
+ private final PlainConnectionSocketFactory plainConnectionSocketFactory = PlainConnectionSocketFactory.getSocketFactory();
|
|
|
private String httpProxyHost;
|
|
|
private int httpProxyPort;
|
|
|
private String httpProxyUsername;
|
|
@@ -111,90 +150,6 @@ public class DefaultApacheHttpClientBuilder implements ApacheHttpClientBuilder {
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取链接的超时时间设置,默认3000ms
|
|
|
- * <p>
|
|
|
- * 设置为零时不超时,一直等待.
|
|
|
- * 设置为负数是使用系统默认设置(非上述的3000ms的默认值,而是httpclient的默认设置).
|
|
|
- * </p>
|
|
|
- *
|
|
|
- * @param connectionRequestTimeout 获取链接的超时时间设置(单位毫秒),默认3000ms
|
|
|
- */
|
|
|
- public void setConnectionRequestTimeout(int connectionRequestTimeout) {
|
|
|
- this.connectionRequestTimeout = connectionRequestTimeout;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 建立链接的超时时间,默认为5000ms.由于是在链接池获取链接,此设置应该并不起什么作用
|
|
|
- * <p>
|
|
|
- * 设置为零时不超时,一直等待.
|
|
|
- * 设置为负数是使用系统默认设置(非上述的5000ms的默认值,而是httpclient的默认设置).
|
|
|
- * </p>
|
|
|
- *
|
|
|
- * @param connectionTimeout 建立链接的超时时间设置(单位毫秒),默认5000ms
|
|
|
- */
|
|
|
- public void setConnectionTimeout(int connectionTimeout) {
|
|
|
- this.connectionTimeout = connectionTimeout;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 默认NIO的socket超时设置,默认5000ms.
|
|
|
- *
|
|
|
- * @param soTimeout 默认NIO的socket超时设置,默认5000ms.
|
|
|
- * @see java.net.SocketOptions#SO_TIMEOUT
|
|
|
- */
|
|
|
- public void setSoTimeout(int soTimeout) {
|
|
|
- this.soTimeout = soTimeout;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 空闲链接的超时时间,默认60000ms.
|
|
|
- * <p>
|
|
|
- * 超时的链接将在下一次空闲链接检查是被销毁
|
|
|
- * </p>
|
|
|
- *
|
|
|
- * @param idleConnTimeout 空闲链接的超时时间,默认60000ms.
|
|
|
- */
|
|
|
- public void setIdleConnTimeout(int idleConnTimeout) {
|
|
|
- this.idleConnTimeout = idleConnTimeout;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 检查空间链接的间隔周期,默认60000ms.
|
|
|
- *
|
|
|
- * @param checkWaitTime 检查空间链接的间隔周期,默认60000ms.
|
|
|
- */
|
|
|
- public void setCheckWaitTime(int checkWaitTime) {
|
|
|
- this.checkWaitTime = checkWaitTime;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 每路的最大链接数,默认10
|
|
|
- *
|
|
|
- * @param maxConnPerHost 每路的最大链接数,默认10
|
|
|
- */
|
|
|
- public void setMaxConnPerHost(int maxConnPerHost) {
|
|
|
- this.maxConnPerHost = maxConnPerHost;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 最大总连接数,默认50
|
|
|
- *
|
|
|
- * @param maxTotalConn 最大总连接数,默认50
|
|
|
- */
|
|
|
- public void setMaxTotalConn(int maxTotalConn) {
|
|
|
- this.maxTotalConn = maxTotalConn;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 自定义httpclient的User Agent
|
|
|
- *
|
|
|
- * @param userAgent User Agent
|
|
|
- */
|
|
|
- public void setUserAgent(String userAgent) {
|
|
|
- this.userAgent = userAgent;
|
|
|
- }
|
|
|
-
|
|
|
public IdleConnectionMonitorThread getIdleConnectionMonitorThread() {
|
|
|
return this.idleConnectionMonitorThread;
|
|
|
}
|
|
@@ -268,7 +223,7 @@ public class DefaultApacheHttpClientBuilder implements ApacheHttpClientBuilder {
|
|
|
null,
|
|
|
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
|
|
|
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
|
|
|
- this.log.error(e.getMessage(), e);
|
|
|
+ log.error("构建SSL连接工厂时发生异常!", e);
|
|
|
}
|
|
|
|
|
|
return null;
|