diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/DefaultApacheHttpClientBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/DefaultApacheHttpClientBuilder.java deleted file mode 100644 index 030fe98f..00000000 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/DefaultApacheHttpClientBuilder.java +++ /dev/null @@ -1,292 +0,0 @@ -package me.chanjar.weixin.common.util.http; - -import org.apache.commons.lang3.StringUtils; -import org.apache.http.annotation.NotThreadSafe; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.client.HttpRequestRetryHandler; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.config.Registry; -import org.apache.http.config.RegistryBuilder; -import org.apache.http.config.SocketConfig; -import org.apache.http.conn.HttpClientConnectionManager; -import org.apache.http.conn.socket.ConnectionSocketFactory; -import org.apache.http.conn.socket.PlainConnectionSocketFactory; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.protocol.HttpContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; - -/** - * httpclient 连接管理器 - * - * @author kakotor - */ -@NotThreadSafe -public class DefaultApacheHttpClientBuilder implements ApacheHttpClientBuilder { - protected final Logger log = LoggerFactory.getLogger(DefaultApacheHttpClientBuilder.class); - private final AtomicBoolean prepared = new AtomicBoolean(false); - private int connectionRequestTimeout = 3000; - private int connectionTimeout = 5000; - private int soTimeout = 5000; - private int idleConnTimeout = 60000; - private int checkWaitTime = 60000; - private int maxConnPerHost = 10; - private int maxTotalConn = 50; - private String userAgent; - private 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 String httpProxyHost; - private int httpProxyPort; - private String httpProxyUsername; - private String httpProxyPassword; - /** - * 闲置连接监控线程 - */ - private IdleConnectionMonitorThread idleConnectionMonitorThread; - private HttpClientBuilder httpClientBuilder; - - private DefaultApacheHttpClientBuilder() { - } - - public static DefaultApacheHttpClientBuilder get() { - return new DefaultApacheHttpClientBuilder(); - } - - @Override - public ApacheHttpClientBuilder httpProxyHost(String httpProxyHost) { - this.httpProxyHost = httpProxyHost; - return this; - } - - @Override - public ApacheHttpClientBuilder httpProxyPort(int httpProxyPort) { - this.httpProxyPort = httpProxyPort; - return this; - } - - @Override - public ApacheHttpClientBuilder httpProxyUsername(String httpProxyUsername) { - this.httpProxyUsername = httpProxyUsername; - return this; - } - - @Override - public ApacheHttpClientBuilder httpProxyPassword(String httpProxyPassword) { - this.httpProxyPassword = httpProxyPassword; - return this; - } - - @Override - public ApacheHttpClientBuilder sslConnectionSocketFactory(SSLConnectionSocketFactory sslConnectionSocketFactory) { - this.sslConnectionSocketFactory = sslConnectionSocketFactory; - return this; - } - - /** - * 获取链接的超时时间设置,默认3000ms - *

- * 设置为零时不超时,一直等待. - * 设置为负数是使用系统默认设置(非上述的3000ms的默认值,而是httpclient的默认设置). - *

- * - * @param connectionRequestTimeout 获取链接的超时时间设置(单位毫秒),默认3000ms - */ - public void setConnectionRequestTimeout(int connectionRequestTimeout) { - this.connectionRequestTimeout = connectionRequestTimeout; - } - - /** - * 建立链接的超时时间,默认为5000ms.由于是在链接池获取链接,此设置应该并不起什么作用 - *

- * 设置为零时不超时,一直等待. - * 设置为负数是使用系统默认设置(非上述的5000ms的默认值,而是httpclient的默认设置). - *

- * - * @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. - *

- * 超时的链接将在下一次空闲链接检查是被销毁 - *

- * - * @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; - } - - private synchronized void prepare() { - if(prepared.get()){ - return; - } - Registry registry = RegistryBuilder.create() - .register("http", this.plainConnectionSocketFactory) - .register("https", this.sslConnectionSocketFactory) - .build(); - - @SuppressWarnings("resource") - PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry); - connectionManager.setMaxTotal(this.maxTotalConn); - connectionManager.setDefaultMaxPerRoute(this.maxConnPerHost); - connectionManager.setDefaultSocketConfig( - SocketConfig.copy(SocketConfig.DEFAULT) - .setSoTimeout(this.soTimeout) - .build() - ); - - this.idleConnectionMonitorThread = new IdleConnectionMonitorThread( - connectionManager, this.idleConnTimeout, this.checkWaitTime); - this.idleConnectionMonitorThread.setDaemon(true); - this.idleConnectionMonitorThread.start(); - - this.httpClientBuilder = HttpClients.custom() - .setConnectionManager(connectionManager) - .setConnectionManagerShared(true) - .setDefaultRequestConfig( - RequestConfig.custom() - .setSocketTimeout(this.soTimeout) - .setConnectTimeout(this.connectionTimeout) - .setConnectionRequestTimeout(this.connectionRequestTimeout) - .build() - ) - .setRetryHandler(this.httpRequestRetryHandler); - - if (StringUtils.isNotBlank(this.httpProxyHost) - && StringUtils.isNotBlank(this.httpProxyUsername)) { - // 使用代理服务器 需要用户认证的代理服务器 - CredentialsProvider provider = new BasicCredentialsProvider(); - provider.setCredentials( - new AuthScope(this.httpProxyHost, this.httpProxyPort), - new UsernamePasswordCredentials(this.httpProxyUsername, - this.httpProxyPassword)); - this.httpClientBuilder.setDefaultCredentialsProvider(provider); - } - - if (StringUtils.isNotBlank(this.userAgent)) { - this.httpClientBuilder.setUserAgent(this.userAgent); - } - prepared.set(true); - } - - @Override - public CloseableHttpClient build() { - if(!prepared.get()){ - prepare(); - } - return this.httpClientBuilder.build(); - } - - public static class IdleConnectionMonitorThread extends Thread { - private final HttpClientConnectionManager connMgr; - private final int idleConnTimeout; - private final int checkWaitTime; - private volatile boolean shutdown; - - public IdleConnectionMonitorThread(HttpClientConnectionManager connMgr, int idleConnTimeout, int checkWaitTime) { - super("IdleConnectionMonitorThread"); - this.connMgr = connMgr; - this.idleConnTimeout = idleConnTimeout; - this.checkWaitTime = checkWaitTime; - } - - @Override - public void run() { - try { - while (!this.shutdown) { - synchronized (this) { - wait(this.checkWaitTime); - this.connMgr.closeExpiredConnections(); - this.connMgr.closeIdleConnections(this.idleConnTimeout, - TimeUnit.MILLISECONDS); - } - } - } catch (InterruptedException ignore) { - } - } - - public void trigger() { - synchronized (this) { - notifyAll(); - } - } - - public void shutdown() { - this.shutdown = true; - synchronized (this) { - notifyAll(); - } - } - } -} diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestExecutor.java index 6d2dbe9a..9110e12a 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestExecutor.java @@ -1,8 +1,6 @@ package me.chanjar.weixin.common.util.http; import me.chanjar.weixin.common.exception.WxErrorException; -import org.apache.http.HttpHost; -import org.apache.http.impl.client.CloseableHttpClient; import java.io.IOException; @@ -12,16 +10,16 @@ import java.io.IOException; * @param 返回值类型 * @param 请求参数类型 */ -public interface RequestExecutor { +public interface RequestExecutor { /** - * @param httpclient 传入的httpClient + * @param httpClient * @param httpProxy http代理对象,如果没有配置代理则为空 * @param uri uri * @param data 数据 * @throws WxErrorException * @throws IOException */ - T execute(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, E data) throws WxErrorException, IOException; + T execute(H httpClient, P httpProxy, String uri, E data) throws WxErrorException, IOException; } diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/Utf8ResponseHandler.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/Utf8ResponseHandler.java deleted file mode 100644 index 148ef965..00000000 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/Utf8ResponseHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package me.chanjar.weixin.common.util.http; - -import org.apache.http.Consts; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.client.HttpResponseException; -import org.apache.http.client.ResponseHandler; -import org.apache.http.util.EntityUtils; - -import java.io.IOException; - -/** - * copy from {@link org.apache.http.impl.client.BasicResponseHandler} - * - * @author Daniel Qian - */ -public class Utf8ResponseHandler implements ResponseHandler { - - public static final ResponseHandler INSTANCE = new Utf8ResponseHandler(); - - @Override - public String handleResponse(final HttpResponse response) throws IOException { - final StatusLine statusLine = response.getStatusLine(); - final HttpEntity entity = response.getEntity(); - if (statusLine.getStatusCode() >= 300) { - EntityUtils.consume(entity); - throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase()); - } - return entity == null ? null : EntityUtils.toString(entity, Consts.UTF_8); - } - -} diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/ApacheHttpClientBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpClientBuilder.java similarity index 95% rename from weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/ApacheHttpClientBuilder.java rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpClientBuilder.java index c932445d..87a86dba 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/ApacheHttpClientBuilder.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpClientBuilder.java @@ -1,4 +1,4 @@ -package me.chanjar.weixin.common.util.http; +package me.chanjar.weixin.common.util.http.apache; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/DefaultApacheHttpClientBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/DefaultApacheHttpClientBuilder.java similarity index 99% rename from weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/DefaultApacheHttpClientBuilder.java rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/DefaultApacheHttpClientBuilder.java index 3f667abe..2bb1f072 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/DefaultApacheHttpClientBuilder.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/DefaultApacheHttpClientBuilder.java @@ -1,4 +1,4 @@ -package me.chanjar.weixin.common.util.http.jodd; +package me.chanjar.weixin.common.util.http.apache; import org.apache.commons.lang3.StringUtils; import org.apache.http.annotation.NotThreadSafe; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/InputStreamResponseHandler.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/InputStreamResponseHandler.java similarity index 94% rename from weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/InputStreamResponseHandler.java rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/InputStreamResponseHandler.java index 0cc1562b..d4cea91d 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/InputStreamResponseHandler.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/InputStreamResponseHandler.java @@ -1,4 +1,4 @@ -package me.chanjar.weixin.common.util.http; +package me.chanjar.weixin.common.util.http.apache; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/MediaDownloadRequestExecutor.java similarity index 95% rename from weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/MediaDownloadRequestExecutor.java index 57024f50..5479a0b6 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/MediaDownloadRequestExecutor.java @@ -1,8 +1,9 @@ -package me.chanjar.weixin.common.util.http; +package me.chanjar.weixin.common.util.http.apache; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.util.fs.FileUtils; +import me.chanjar.weixin.common.util.http.RequestExecutor; import org.apache.commons.lang3.StringUtils; import org.apache.http.Header; import org.apache.http.HttpHost; @@ -23,7 +24,7 @@ import java.util.regex.Pattern; * 视频文件不支持下载 * @author Daniel Qian */ -public class MediaDownloadRequestExecutor implements RequestExecutor { +public class MediaDownloadRequestExecutor implements RequestExecutor { private File tmpDirFile; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaUploadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/MediaUploadRequestExecutor.java similarity index 92% rename from weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaUploadRequestExecutor.java rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/MediaUploadRequestExecutor.java index 54ded05a..66901d3b 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaUploadRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/MediaUploadRequestExecutor.java @@ -1,8 +1,9 @@ -package me.chanjar.weixin.common.util.http; +package me.chanjar.weixin.common.util.http.apache; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.common.util.http.RequestExecutor; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; @@ -21,7 +22,7 @@ import java.io.IOException; * * @author Daniel Qian */ -public class MediaUploadRequestExecutor implements RequestExecutor { +public class MediaUploadRequestExecutor implements RequestExecutor { @Override public WxMediaUploadResult execute(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, File file) throws WxErrorException, IOException { diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimpleGetRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/SimpleGetRequestExecutor.java similarity index 90% rename from weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimpleGetRequestExecutor.java rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/SimpleGetRequestExecutor.java index ec221e28..fce598f4 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimpleGetRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/SimpleGetRequestExecutor.java @@ -1,7 +1,8 @@ -package me.chanjar.weixin.common.util.http; +package me.chanjar.weixin.common.util.http.apache; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.common.util.http.RequestExecutor; import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -15,7 +16,7 @@ import java.io.IOException; * * @author Daniel Qian */ -public class SimpleGetRequestExecutor implements RequestExecutor { +public class SimpleGetRequestExecutor implements RequestExecutor { @Override public String execute(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, String queryParam) throws WxErrorException, IOException { diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimplePostRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/SimplePostRequestExecutor.java similarity index 92% rename from weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimplePostRequestExecutor.java rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/SimplePostRequestExecutor.java index bdea8573..a63944bc 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimplePostRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/SimplePostRequestExecutor.java @@ -1,7 +1,8 @@ -package me.chanjar.weixin.common.util.http; - -import java.io.IOException; +package me.chanjar.weixin.common.util.http.apache; +import me.chanjar.weixin.common.bean.result.WxError; +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.common.util.http.RequestExecutor; import org.apache.http.Consts; import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; @@ -10,15 +11,14 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; -import me.chanjar.weixin.common.bean.result.WxError; -import me.chanjar.weixin.common.exception.WxErrorException; +import java.io.IOException; /** * 简单的POST请求执行器,请求的参数是String, 返回的结果也是String * * @author Daniel Qian */ -public class SimplePostRequestExecutor implements RequestExecutor { +public class SimplePostRequestExecutor implements RequestExecutor { @Override public String execute(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, String postEntity) throws WxErrorException, IOException { diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/Utf8ResponseHandler.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/Utf8ResponseHandler.java similarity index 95% rename from weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/Utf8ResponseHandler.java rename to weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/Utf8ResponseHandler.java index e26d3e33..697d4695 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/Utf8ResponseHandler.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/Utf8ResponseHandler.java @@ -1,4 +1,4 @@ -package me.chanjar.weixin.common.util.http.jodd; +package me.chanjar.weixin.common.util.http.apache; import org.apache.http.Consts; import org.apache.http.HttpEntity; diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/ApacheHttpClientBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/ApacheHttpClientBuilder.java deleted file mode 100644 index ce021a04..00000000 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/ApacheHttpClientBuilder.java +++ /dev/null @@ -1,53 +0,0 @@ -package me.chanjar.weixin.common.util.http.jodd; - -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.client.CloseableHttpClient; - -/** - * httpclient build interface - * @author kakotor - */ -public interface ApacheHttpClientBuilder { - - /** - * 构建httpclient实例 - * - * @return new instance of CloseableHttpClient - */ - CloseableHttpClient build(); - - /** - * 代理服务器地址 - * - * @param httpProxyHost - */ - ApacheHttpClientBuilder httpProxyHost(String httpProxyHost); - - /** - * 代理服务器端口 - * - * @param httpProxyPort - */ - ApacheHttpClientBuilder httpProxyPort(int httpProxyPort); - - /** - * 代理服务器用户名 - * - * @param httpProxyUsername - */ - ApacheHttpClientBuilder httpProxyUsername(String httpProxyUsername); - - /** - * 代理服务器密码 - * - * @param httpProxyPassword - */ - ApacheHttpClientBuilder httpProxyPassword(String httpProxyPassword); - - /** - * ssl连接socket工厂 - * - * @param sslConnectionSocketFactory - */ - ApacheHttpClientBuilder sslConnectionSocketFactory(SSLConnectionSocketFactory sslConnectionSocketFactory); -} diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/InputStreamResponseHandler.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/InputStreamResponseHandler.java deleted file mode 100644 index a766d4c2..00000000 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/InputStreamResponseHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package me.chanjar.weixin.common.util.http.jodd; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.client.HttpResponseException; -import org.apache.http.client.ResponseHandler; -import org.apache.http.util.EntityUtils; - -import java.io.IOException; -import java.io.InputStream; - -public class InputStreamResponseHandler implements ResponseHandler { - - public static final ResponseHandler INSTANCE = new InputStreamResponseHandler(); - - @Override - public InputStream handleResponse(final HttpResponse response) throws IOException { - final StatusLine statusLine = response.getStatusLine(); - final HttpEntity entity = response.getEntity(); - if (statusLine.getStatusCode() >= 300) { - EntityUtils.consume(entity); - throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase()); - } - return entity == null ? null : entity.getContent(); - } - -} diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/MediaDownloadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/MediaDownloadRequestExecutor.java index ff617e8e..9e4b092f 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/MediaDownloadRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/MediaDownloadRequestExecutor.java @@ -1,11 +1,13 @@ package me.chanjar.weixin.common.util.http.jodd; +import jodd.http.HttpConnectionProvider; import jodd.http.HttpRequest; import jodd.http.HttpResponse; import jodd.http.ProxyInfo; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.util.fs.FileUtils; +import me.chanjar.weixin.common.util.http.RequestExecutor; import org.apache.commons.lang3.StringUtils; import java.io.ByteArrayInputStream; @@ -21,7 +23,7 @@ import java.util.regex.Pattern; * * @author Daniel Qian */ -public class MediaDownloadRequestExecutor implements RequestExecutor { +public class MediaDownloadRequestExecutor implements RequestExecutor { private File tmpDirFile; @@ -33,7 +35,7 @@ public class MediaDownloadRequestExecutor implements RequestExecutor { +public class MediaUploadRequestExecutor implements RequestExecutor { @Override - public WxMediaUploadResult execute(ProxyInfo httpProxy, String uri, File file) throws WxErrorException, IOException { + public WxMediaUploadResult execute(HttpConnectionProvider provider, ProxyInfo httpProxy, String uri, File file) throws WxErrorException, IOException { HttpRequest request = HttpRequest.post(uri); if (httpProxy != null) { - SocketHttpConnectionProvider provider = new SocketHttpConnectionProvider(); provider.useProxy(httpProxy); - request.withConnectionProvider(provider); } + request.withConnectionProvider(provider); request.form("media", file); HttpResponse response = request.send(); String responseContent =response.bodyText(); diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/RequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/RequestExecutor.java deleted file mode 100644 index ccc82702..00000000 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/RequestExecutor.java +++ /dev/null @@ -1,25 +0,0 @@ -package me.chanjar.weixin.common.util.http.jodd; - -import jodd.http.ProxyInfo; -import me.chanjar.weixin.common.exception.WxErrorException; - -import java.io.IOException; - -/** - * http请求执行器 - * - * @param 返回值类型 - * @param 请求参数类型 - */ -public interface RequestExecutor { - - /** - * @param httpProxy http代理对象,如果没有配置代理则为空 - * @param uri uri - * @param data 数据 - * @throws WxErrorException - * @throws IOException - */ - T execute(ProxyInfo httpProxy, String uri, E data) throws WxErrorException, IOException; - -} diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/SimpleGetRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/SimpleGetRequestExecutor.java index de84ad7b..221e3b1e 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/SimpleGetRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/SimpleGetRequestExecutor.java @@ -1,11 +1,12 @@ package me.chanjar.weixin.common.util.http.jodd; +import jodd.http.HttpConnectionProvider; import jodd.http.HttpRequest; import jodd.http.HttpResponse; import jodd.http.ProxyInfo; -import jodd.http.net.SocketHttpConnectionProvider; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.common.util.http.RequestExecutor; import java.io.IOException; @@ -14,10 +15,10 @@ import java.io.IOException; * * @author Daniel Qian */ -public class SimpleGetRequestExecutor implements RequestExecutor { +public class SimpleGetRequestExecutor implements RequestExecutor { @Override - public String execute(ProxyInfo httpProxy, String uri, String queryParam) throws WxErrorException, IOException { + public String execute(HttpConnectionProvider provider, ProxyInfo httpProxy, String uri, String queryParam) throws WxErrorException, IOException { if (queryParam != null) { if (uri.indexOf('?') == -1) { uri += '?'; @@ -27,10 +28,9 @@ public class SimpleGetRequestExecutor implements RequestExecutor HttpRequest request = HttpRequest.get(uri); if (httpProxy != null) { - SocketHttpConnectionProvider provider = new SocketHttpConnectionProvider(); provider.useProxy(httpProxy); - request.withConnectionProvider(provider); } + request.withConnectionProvider(provider); HttpResponse response = request.send(); String responseContent = response.bodyText(); WxError error = WxError.fromJson(responseContent); diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/SimplePostRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/SimplePostRequestExecutor.java index 276b1310..057abf8e 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/SimplePostRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/SimplePostRequestExecutor.java @@ -1,11 +1,12 @@ package me.chanjar.weixin.common.util.http.jodd; +import jodd.http.HttpConnectionProvider; import jodd.http.HttpRequest; import jodd.http.HttpResponse; import jodd.http.ProxyInfo; -import jodd.http.net.SocketHttpConnectionProvider; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.common.util.http.RequestExecutor; import java.io.IOException; @@ -14,16 +15,15 @@ import java.io.IOException; * * @author Daniel Qian */ -public class SimplePostRequestExecutor implements RequestExecutor { +public class SimplePostRequestExecutor implements RequestExecutor { @Override - public String execute(ProxyInfo httpProxy, String uri, String postEntity) throws WxErrorException, IOException { + public String execute(HttpConnectionProvider provider, ProxyInfo httpProxy, String uri, String postEntity) throws WxErrorException, IOException { HttpRequest request = HttpRequest.post(uri); if (httpProxy != null) { - SocketHttpConnectionProvider provider = new SocketHttpConnectionProvider(); provider.useProxy(httpProxy); - request.withConnectionProvider(provider); } + request.withConnectionProvider(provider); if (postEntity != null) { request.bodyText(postEntity); } diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/URIUtil.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/URIUtil.java deleted file mode 100644 index ac293d79..00000000 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/URIUtil.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.chanjar.weixin.common.util.http.jodd; - - -import org.apache.commons.lang3.StringUtils; - -import java.io.UnsupportedEncodingException; - -public class URIUtil { - - private static final String ALLOWED_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!~*'()"; - - public static String encodeURIComponent(String input) { - if (StringUtils.isEmpty(input)) { - return input; - } - - int l = input.length(); - StringBuilder o = new StringBuilder(l * 3); - try { - for (int i = 0; i < l; i++) { - String e = input.substring(i, i + 1); - if (ALLOWED_CHARS.indexOf(e) == -1) { - byte[] b = e.getBytes("utf-8"); - o.append(getHex(b)); - continue; - } - o.append(e); - } - return o.toString(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - return input; - } - - private static String getHex(byte buf[]) { - StringBuilder o = new StringBuilder(buf.length * 3); - for (int i = 0; i < buf.length; i++) { - int n = buf[i] & 0xff; - o.append("%"); - if (n < 0x10) { - o.append("0"); - } - o.append(Long.toString(n, 16).toUpperCase()); - } - return o.toString(); - } -}