diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index 29c2ec4c..946c65c2 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -39,11 +39,6 @@
jetty-servlet
test
-
- org.jodd
- jodd-http
- 3.7
-
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/AbstractRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/AbstractRequestExecutor.java
new file mode 100644
index 00000000..23881e66
--- /dev/null
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/AbstractRequestExecutor.java
@@ -0,0 +1,43 @@
+package me.chanjar.weixin.common.util.http;
+
+import java.io.IOException;
+
+import org.apache.http.HttpHost;
+import org.apache.http.impl.client.CloseableHttpClient;
+
+import jodd.http.HttpConnectionProvider;
+import jodd.http.ProxyInfo;
+import me.chanjar.weixin.common.exception.WxErrorException;
+import me.chanjar.weixin.common.util.http.okhttp.OkhttpProxyInfo;
+import okhttp3.ConnectionPool;
+
+/**
+ * Created by ecoolper on 2017/4/27.
+ */
+public abstract class AbstractRequestExecutor implements RequestExecutor {
+
+ @Override
+ public T execute(RequestHttp requestHttp, String uri, E data) throws WxErrorException, IOException{
+ if (requestHttp.getRequestHttpClient() instanceof CloseableHttpClient) {
+ //apache-http请求
+ CloseableHttpClient httpClient = (CloseableHttpClient) requestHttp.getRequestHttpClient();
+ HttpHost httpProxy = (HttpHost) requestHttp.getRequestHttpProxy();
+ return executeApache(httpClient, httpProxy, uri, data);
+ }
+ if (requestHttp.getRequestHttpClient() instanceof HttpConnectionProvider) {
+ //jodd-http请求
+ HttpConnectionProvider provider = (HttpConnectionProvider) requestHttp.getRequestHttpClient();
+ ProxyInfo proxyInfo = (ProxyInfo) requestHttp.getRequestHttpProxy();
+ return executeJodd(provider, proxyInfo, uri, data);
+ } else if (requestHttp.getRequestHttpClient() instanceof ConnectionPool) {
+ //okhttp请求
+ ConnectionPool pool = (ConnectionPool) requestHttp.getRequestHttpClient();
+ OkhttpProxyInfo proxyInfo = (OkhttpProxyInfo) requestHttp.getRequestHttpProxy();
+ return executeOkhttp(pool, proxyInfo, uri, data);
+ } else {
+ //TODO 这里需要抛出异常,需要优化
+ return null;
+ }
+ }
+
+}
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/MediaDownloadRequestExecutor.java
index b69438fa..e95f02de 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/MediaDownloadRequestExecutor.java
@@ -5,10 +5,14 @@ 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.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.util.fs.FileUtils;
import me.chanjar.weixin.common.util.http.apache.InputStreamResponseHandler;
import me.chanjar.weixin.common.util.http.apache.Utf8ResponseHandler;
+import me.chanjar.weixin.common.util.http.okhttp.OkhttpProxyInfo;
+import okhttp3.*;
+
import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
import org.apache.http.HttpHost;
@@ -22,6 +26,8 @@ import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -31,7 +37,7 @@ import java.util.regex.Pattern;
*
* @author Daniel Qian
*/
-public class MediaDownloadRequestExecutor implements RequestExecutor {
+public class MediaDownloadRequestExecutor extends AbstractRequestExecutor {
private File tmpDirFile;
@@ -39,24 +45,7 @@ public class MediaDownloadRequestExecutor implements RequestExecutor 0) {
if (contentTypeHeader[0].getValue().startsWith(ContentType.APPLICATION_JSON.getMimeType())) {
@@ -122,7 +111,7 @@ public class MediaDownloadRequestExecutor implements RequestExecutor {
-
- @Override
- public WxMediaUploadResult execute(RequestHttp requestHttp, String uri, File file) throws WxErrorException, IOException {
- if (requestHttp.getRequestHttpClient() instanceof CloseableHttpClient) {
- CloseableHttpClient httpClient = (CloseableHttpClient) requestHttp.getRequestHttpClient();
- HttpHost httpProxy = (HttpHost) requestHttp.getRequestHttpProxy();
- return executeApache(httpClient, httpProxy, uri, file);
- }
- if (requestHttp.getRequestHttpClient() instanceof HttpConnectionProvider) {
- HttpConnectionProvider provider = (HttpConnectionProvider) requestHttp.getRequestHttpClient();
- ProxyInfo proxyInfo = (ProxyInfo) requestHttp.getRequestHttpProxy();
- return executeJodd(provider, proxyInfo, uri, file);
- } else {
- //这里需要抛出异常,需要优化
- return null;
- }
-
-
- }
+public class MediaUploadRequestExecutor extends AbstractRequestExecutor {
/**
* apache-http实现方式
+ *
* @param httpclient
* @param httpProxy
* @param uri
@@ -57,7 +44,7 @@ public class MediaUploadRequestExecutor implements RequestExecutor {
*/
T execute(RequestHttp requestHttp, String uri, E data) throws WxErrorException, IOException;
+ /**
+ * apache-http实现方式
+ * @param httpclient
+ * @param httpProxy
+ * @param uri
+ * @param data
+ * @return
+ * @throws WxErrorException
+ * @throws IOException
+ */
+ T executeApache(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, E data) throws WxErrorException, IOException;
+
+ /**
+ * jodd-http实现方式
+ * @param provider
+ * @param proxyInfo
+ * @param uri
+ * @param data
+ * @return
+ * @throws WxErrorException
+ * @throws IOException
+ */
+ T executeJodd(HttpConnectionProvider provider, ProxyInfo proxyInfo, String uri, E data) throws WxErrorException, IOException;
+
+
+ /** okhttp实现方式
+ * @param pool
+ * @param proxyInfo
+ * @param uri
+ * @param data
+ * @return
+ * @throws WxErrorException
+ * @throws IOException
+ */
+ T executeOkhttp(ConnectionPool pool, final OkhttpProxyInfo proxyInfo, String uri, E data) throws WxErrorException, IOException;
+
+
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestHttp.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestHttp.java
index 02225d46..5af68e07 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestHttp.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/RequestHttp.java
@@ -3,18 +3,18 @@ package me.chanjar.weixin.common.util.http;
/**
* Created by ecoolper on 2017/4/22.
*/
-public interface RequestHttp {
+public interface RequestHttp {
/**
* 返回httpClient
* @return
*/
- Object getRequestHttpClient();
+ H getRequestHttpClient();
/**
* 返回httpProxy
* @return
*/
- Object getRequestHttpProxy();
+ P getRequestHttpProxy();
}
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/SimpleGetRequestExecutor.java
index cb414d2b..50beb29f 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/SimpleGetRequestExecutor.java
@@ -7,6 +7,9 @@ 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.http.apache.Utf8ResponseHandler;
+import me.chanjar.weixin.common.util.http.okhttp.OkhttpProxyInfo;
+import okhttp3.*;
+
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -14,34 +17,20 @@ import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.util.concurrent.TimeUnit;
/**
* 简单的GET请求执行器,请求的参数是String, 返回的结果也是String
*
* @author Daniel Qian
*/
-public class SimpleGetRequestExecutor implements RequestExecutor {
-
- @Override
- public String execute(RequestHttp requestHttp, String uri, String queryParam) throws WxErrorException, IOException {
- if (requestHttp.getRequestHttpClient() instanceof CloseableHttpClient) {
- CloseableHttpClient httpClient = (CloseableHttpClient) requestHttp.getRequestHttpClient();
- HttpHost httpProxy = (HttpHost) requestHttp.getRequestHttpProxy();
- return executeApache(httpClient, httpProxy, uri, queryParam);
- }
- if (requestHttp.getRequestHttpClient() instanceof HttpConnectionProvider) {
- HttpConnectionProvider provider = (HttpConnectionProvider) requestHttp.getRequestHttpClient();
- ProxyInfo proxyInfo = (ProxyInfo) requestHttp.getRequestHttpProxy();
- return executeJodd(provider, proxyInfo, uri, queryParam);
- } else {
- //这里需要抛出异常,需要优化
- return null;
- }
- }
-
+public class SimpleGetRequestExecutor extends AbstractRequestExecutor {
/**
* apache-http实现方式
+ *
* @param httpclient
* @param httpProxy
* @param uri
@@ -50,7 +39,7 @@ public class SimpleGetRequestExecutor implements RequestExecutor
* @throws WxErrorException
* @throws IOException
*/
- private String executeApache(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, String queryParam) throws WxErrorException, IOException {
+ public String executeApache(CloseableHttpClient httpclient, HttpHost httpProxy, String uri, String queryParam) throws WxErrorException, IOException {
if (queryParam != null) {
if (uri.indexOf('?') == -1) {
uri += '?';
@@ -78,6 +67,7 @@ public class SimpleGetRequestExecutor implements RequestExecutor
/**
* jodd-http实现方式
+ *
* @param provider
* @param proxyInfo
* @param uri
@@ -86,7 +76,7 @@ public class SimpleGetRequestExecutor implements RequestExecutor
* @throws WxErrorException
* @throws IOException
*/
- private String executeJodd(HttpConnectionProvider provider, ProxyInfo proxyInfo, String uri, String queryParam) throws WxErrorException, IOException {
+ public String executeJodd(HttpConnectionProvider provider, ProxyInfo proxyInfo, String uri, String queryParam) throws WxErrorException, IOException {
if (queryParam != null) {
if (uri.indexOf('?') == -1) {
uri += '?';
@@ -108,4 +98,53 @@ public class SimpleGetRequestExecutor implements RequestExecutor
return responseContent;
}
+ /**
+ * okHttp实现方式
+ *
+ * @param pool
+ * @param proxyInfo
+ * @param uri
+ * @param queryParam
+ * @return
+ * @throws WxErrorException
+ * @throws IOException
+ */
+ public String executeOkhttp(ConnectionPool pool, final OkhttpProxyInfo proxyInfo, String uri, String queryParam) throws WxErrorException, IOException {
+ if (queryParam != null) {
+ if (uri.indexOf('?') == -1) {
+ uri += '?';
+ }
+ uri += uri.endsWith("?") ? queryParam : '&' + queryParam;
+ }
+
+ OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(pool);
+ //设置代理
+ if (proxyInfo != null) {
+ clientBuilder.proxy(proxyInfo.getProxy());
+ }
+ //设置授权
+ clientBuilder.authenticator(new Authenticator() {
+ @Override
+ public Request authenticate(Route route, Response response) throws IOException {
+ String credential = Credentials.basic(proxyInfo.getProxyUsername(), proxyInfo.getProxyPassword());
+ return response.request().newBuilder()
+ .header("Authorization", credential)
+ .build();
+ }
+ });
+ //得到httpClient
+ OkHttpClient client =clientBuilder.build();
+
+ Request request = new Request.Builder().url(uri).build();
+
+ Response response = client.newCall(request).execute();
+ String responseContent = response.body().toString();
+ WxError error = WxError.fromJson(responseContent);
+ if (error.getErrorCode() != 0) {
+ throw new WxErrorException(error);
+ }
+ return responseContent;
+ }
+
+
}
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/SimplePostRequestExecutor.java
index f6873289..28ca7cb7 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/SimplePostRequestExecutor.java
@@ -7,6 +7,9 @@ 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.http.apache.Utf8ResponseHandler;
+import me.chanjar.weixin.common.util.http.okhttp.OkhttpProxyInfo;
+import okhttp3.*;
+
import org.apache.http.Consts;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
@@ -23,27 +26,11 @@ import java.io.IOException;
*
* @author Daniel Qian
*/
-public class SimplePostRequestExecutor implements RequestExecutor {
-
- @Override
- public String execute(RequestHttp requestHttp, String uri, String postEntity) throws WxErrorException, IOException {
- if (requestHttp.getRequestHttpClient() instanceof CloseableHttpClient) {
- CloseableHttpClient httpClient = (CloseableHttpClient) requestHttp.getRequestHttpClient();
- HttpHost httpProxy = (HttpHost) requestHttp.getRequestHttpProxy();
- return executeApache(httpClient, httpProxy, uri, postEntity);
- }
- if (requestHttp.getRequestHttpClient() instanceof HttpConnectionProvider) {
- HttpConnectionProvider provider = (HttpConnectionProvider) requestHttp.getRequestHttpClient();
- ProxyInfo proxyInfo = (ProxyInfo) requestHttp.getRequestHttpProxy();
- return executeJodd(provider, proxyInfo, uri, postEntity);
- } else {
- //这里需要抛出异常,需要优化
- return null;
- }
- }
+public class SimplePostRequestExecutor extends AbstractRequestExecutor {
/**
* apache-http实现方式
+ *
* @param httpclient
* @param httpProxy
* @param uri
@@ -52,7 +39,7 @@ public class SimplePostRequestExecutor implements RequestExecutornull if
+ * no authentication required.
+ */
+ public String getProxyUsername() {
+ return proxyUsername;
+ }
+
+ /**
+ * Returns proxy password or null
.
+ */
+ public String getProxyPassword() {
+ return proxyPassword;
+ }
+
+ /**
+ * 返回 java.net.Proxy
+ * @return
+ */
+ public Proxy getProxy() {
+ Proxy proxy = null;
+ if (getProxyType().equals(ProxyType.SOCKS5)) {
+ proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(getProxyAddress(), getProxyPort()));
+ } else if (getProxyType().equals(ProxyType.SOCKS4)) {
+ proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(getProxyAddress(), getProxyPort()));
+ } else if (getProxyType().equals(ProxyType.HTTP)) {
+ proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(getProxyAddress(), getProxyPort()));
+ } else if (getProxyType().equals(ProxyType.NONE)) {
+ proxy = new Proxy(Proxy.Type.DIRECT, new InetSocketAddress(getProxyAddress(), getProxyPort()));
+ }
+ return proxy;
+ }
+}