diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java index 97f8cb02..e5346c2a 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java @@ -6,7 +6,11 @@ import me.chanjar.weixin.common.util.fs.FileUtils; import me.chanjar.weixin.common.util.http.MediaDownloadRequestExecutor; import me.chanjar.weixin.common.util.http.RequestHttp; import okhttp3.*; +import okio.BufferedSink; +import okio.Okio; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.ByteArrayInputStream; import java.io.File; @@ -18,7 +22,8 @@ import java.util.regex.Pattern; /** * Created by ecoolper on 2017/5/5. */ -public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExecutor { +public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); public OkHttpMediaDownloadRequestExecutor(RequestHttp requestHttp, File tmpDirFile) { @@ -27,6 +32,7 @@ public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExec @Override public File execute(String uri, String queryParam) throws WxErrorException, IOException { + logger.debug("OkHttpMediaDownloadRequestExecutor is running"); if (queryParam != null) { if (uri.indexOf('?') == -1) { uri += '?'; @@ -34,23 +40,8 @@ public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExec uri += uri.endsWith("?") ? queryParam : '&' + queryParam; } - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient()); - //设置代理 - if (requestHttp.getRequestHttpProxy() != null) { - clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy()); - } - //设置授权 - clientBuilder.authenticator(new Authenticator() { - @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword()); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - } - }); //得到httpClient - OkHttpClient client = clientBuilder.build(); + OkHttpClient client = requestHttp.getRequestHttpClient(); Request request = new Request.Builder().url(uri).get().build(); @@ -66,10 +57,12 @@ public class OkHttpMediaDownloadRequestExecutor extends MediaDownloadRequestExec if (StringUtils.isBlank(fileName)) { return null; } - - InputStream inputStream = new ByteArrayInputStream(response.body().bytes()); String[] nameAndExt = fileName.split("\\."); - return FileUtils.createTmpFile(inputStream, nameAndExt[0], nameAndExt[1], super.tmpDirFile); + File file = File.createTempFile(nameAndExt[0], nameAndExt[1], super.tmpDirFile); + try (BufferedSink sink = Okio.buffer(Okio.sink(file))) { + sink.writeAll(response.body().source()); + } + return file; } private String getFileName(Response response) throws WxErrorException { diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaUploadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaUploadRequestExecutor.java index 91b36d7d..9edeee89 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaUploadRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaUploadRequestExecutor.java @@ -6,6 +6,8 @@ import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; import me.chanjar.weixin.common.util.http.RequestHttp; import okhttp3.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; @@ -13,7 +15,8 @@ import java.io.IOException; /** * Created by ecoolper on 2017/5/5. */ -public class OkHttpMediaUploadRequestExecutor extends MediaUploadRequestExecutor { +public class OkHttpMediaUploadRequestExecutor extends MediaUploadRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); public OkHttpMediaUploadRequestExecutor(RequestHttp requestHttp) { super(requestHttp); @@ -21,23 +24,9 @@ public class OkHttpMediaUploadRequestExecutor extends MediaUploadRequestExecutor @Override public WxMediaUploadResult execute(String uri, File file) throws WxErrorException, IOException { - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient()); - //设置代理 - if (requestHttp.getRequestHttpProxy() != null) { - clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy()); - } - //设置授权 - clientBuilder.authenticator(new Authenticator() { - @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword()); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - } - }); + logger.debug("OkHttpMediaUploadRequestExecutor is running"); //得到httpClient - OkHttpClient client = clientBuilder.build(); + OkHttpClient client = requestHttp.getRequestHttpClient(); RequestBody body = new MultipartBody.Builder() .setType(MediaType.parse("multipart/form-data")) diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java index bbb5d437..e468c609 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpSimpleGetRequestExecutor.java @@ -5,13 +5,16 @@ import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; import okhttp3.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; /** * Created by ecoolper on 2017/5/4. */ -public class OkHttpSimpleGetRequestExecutor extends SimpleGetRequestExecutor { +public class OkHttpSimpleGetRequestExecutor extends SimpleGetRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); public OkHttpSimpleGetRequestExecutor(RequestHttp requestHttp) { super(requestHttp); @@ -19,6 +22,7 @@ public class OkHttpSimpleGetRequestExecutor extends SimpleGetRequestExecutor { +public class OkHttpSimplePostRequestExecutor extends SimplePostRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); public OkHttpSimplePostRequestExecutor(RequestHttp requestHttp) { super(requestHttp); @@ -19,27 +22,9 @@ public class OkHttpSimplePostRequestExecutor extends SimplePostRequestExecutor { - protected ConnectionPool httpClient; +public class WxCpServiceOkHttpImpl extends AbstractWxCpServiceImpl { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + protected OkHttpClient httpClient; protected OkHttpProxyInfo httpProxy; @Override - public ConnectionPool getRequestHttpClient() { + public OkHttpClient getRequestHttpClient() { return httpClient; } @@ -32,6 +36,7 @@ public class WxCpServiceOkHttpImpl extends AbstractWxCpServiceImpl 0) { - httpProxy = new OkHttpProxyInfo(OkHttpProxyInfo.ProxyType.SOCKS5, configStorage.getHttpProxyHost(), configStorage.getHttpProxyPort(), configStorage.getHttpProxyUsername(), configStorage.getHttpProxyPassword()); + //设置授权 + clientBuilder.authenticator(new Authenticator() { + @Override + public Request authenticate(Route route, Response response) throws IOException { + String credential = Credentials.basic(httpProxy.getProxyUsername(), httpProxy.getProxyPassword()); + return response.request().newBuilder() + .header("Authorization", credential) + .build(); + } + }); } - - httpClient = new ConnectionPool(); + httpClient = clientBuilder.build(); } @Override diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/AbstractWxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/AbstractWxMpServiceImpl.java index cc965026..25eeeadc 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/AbstractWxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/AbstractWxMpServiceImpl.java @@ -66,10 +66,9 @@ public abstract class AbstractWxMpServiceImpl implements WxMpService, Requ @Override public String getJsapiTicket(boolean forceRefresh) throws WxErrorException { - Lock lock = this.getWxMpConfigStorage().getJsapiTicketLock(); + Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); try { lock.lock(); - if (forceRefresh) { this.getWxMpConfigStorage().expireJsapiTicket(); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceOkHttpImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceOkHttpImpl.java index 81fb8489..dbb957b8 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceOkHttpImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceOkHttpImpl.java @@ -8,16 +8,21 @@ import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; import me.chanjar.weixin.mp.api.WxMpConfigStorage; import me.chanjar.weixin.mp.api.WxMpService; import okhttp3.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.concurrent.locks.Lock; -public class WxMpServiceOkHttpImpl extends AbstractWxMpServiceImpl { - private ConnectionPool httpClient; +public class WxMpServiceOkHttpImpl extends AbstractWxMpServiceImpl { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private OkHttpClient httpClient; private OkHttpProxyInfo httpProxy; @Override - public ConnectionPool getRequestHttpClient() { + public OkHttpClient getRequestHttpClient() { return httpClient; } @@ -33,6 +38,7 @@ public class WxMpServiceOkHttpImpl extends AbstractWxMpServiceImpl 0) { - httpProxy = new OkHttpProxyInfo(OkHttpProxyInfo.ProxyType.SOCKS5, configStorage.getHttpProxyHost(), configStorage.getHttpProxyPort(), configStorage.getHttpProxyUsername(), configStorage.getHttpProxyPassword()); + httpProxy = OkHttpProxyInfo.socks5Proxy(configStorage.getHttpProxyHost(), configStorage.getHttpProxyPort(), configStorage.getHttpProxyUsername(), configStorage.getHttpProxyPassword()); } + OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); + //设置代理 + if (httpProxy != null) { + clientBuilder.proxy(getRequestHttpProxy().getProxy()); - httpClient = new ConnectionPool(); + //设置授权 + clientBuilder.authenticator(new Authenticator() { + @Override + public Request authenticate(Route route, Response response) throws IOException { + String credential = Credentials.basic(httpProxy.getProxyUsername(), httpProxy.getProxyPassword()); + return response.request().newBuilder() + .header("Authorization", credential) + .build(); + } + }); + } + httpClient = clientBuilder.build(); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialDeleteRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialDeleteRequestExecutor.java index 61d4d18b..40ac2746 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialDeleteRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialDeleteRequestExecutor.java @@ -6,13 +6,16 @@ import me.chanjar.weixin.common.util.http.RequestHttp; import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; import me.chanjar.weixin.mp.util.http.MaterialDeleteRequestExecutor; import okhttp3.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; /** * Created by ecoolper on 2017/5/5. */ -public class OkhttpMaterialDeleteRequestExecutor extends MaterialDeleteRequestExecutor { +public class OkhttpMaterialDeleteRequestExecutor extends MaterialDeleteRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); public OkhttpMaterialDeleteRequestExecutor(RequestHttp requestHttp) { @@ -21,23 +24,9 @@ public class OkhttpMaterialDeleteRequestExecutor extends MaterialDeleteRequestEx @Override public Boolean execute(String uri, String materialId) throws WxErrorException, IOException { - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient()); - //设置代理 - if (requestHttp.getRequestHttpProxy() != null) { - clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy()); - } - //设置授权 - clientBuilder.authenticator(new Authenticator() { - @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword()); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - } - }); + logger.debug("OkhttpMaterialDeleteRequestExecutor is running"); //得到httpClient - OkHttpClient client = clientBuilder.build(); + OkHttpClient client = requestHttp.getRequestHttpClient(); RequestBody requestBody = new FormBody.Builder().add("media_id", materialId).build(); Request request = new Request.Builder().url(uri).post(requestBody).build(); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java index a0a1c052..3f46ab78 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialNewsInfoRequestExecutor.java @@ -16,7 +16,7 @@ import java.io.IOException; /** * Created by ecoolper on 2017/5/5. */ -public class OkhttpMaterialNewsInfoRequestExecutor extends MaterialNewsInfoRequestExecutor { +public class OkhttpMaterialNewsInfoRequestExecutor extends MaterialNewsInfoRequestExecutor { private final Logger logger = LoggerFactory.getLogger(this.getClass()); public OkhttpMaterialNewsInfoRequestExecutor(RequestHttp requestHttp) { super(requestHttp); @@ -24,23 +24,9 @@ public class OkhttpMaterialNewsInfoRequestExecutor extends MaterialNewsInfoReque @Override public WxMpMaterialNews execute(String uri, String materialId) throws WxErrorException, IOException { - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient()); - //设置代理 - if (requestHttp.getRequestHttpProxy() != null) { - clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy()); - } - //设置授权 - clientBuilder.authenticator(new Authenticator() { - @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword()); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - } - }); + //得到httpClient - OkHttpClient client = clientBuilder.build(); + OkHttpClient client = requestHttp.getRequestHttpClient(); RequestBody requestBody = new FormBody.Builder().add("media_id", materialId).build(); Request request = new Request.Builder().url(uri).post(requestBody).build(); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialUploadRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialUploadRequestExecutor.java index 3770aa1b..ef4bcbb2 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialUploadRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialUploadRequestExecutor.java @@ -9,6 +9,8 @@ import me.chanjar.weixin.mp.bean.material.WxMpMaterial; import me.chanjar.weixin.mp.bean.material.WxMpMaterialUploadResult; import me.chanjar.weixin.mp.util.http.MaterialUploadRequestExecutor; import okhttp3.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileNotFoundException; @@ -18,13 +20,16 @@ import java.util.Map; /** * Created by ecoolper on 2017/5/5. */ -public class OkhttpMaterialUploadRequestExecutor extends MaterialUploadRequestExecutor { +public class OkhttpMaterialUploadRequestExecutor extends MaterialUploadRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + public OkhttpMaterialUploadRequestExecutor(RequestHttp requestHttp) { super(requestHttp); } @Override public WxMpMaterialUploadResult execute(String uri, WxMpMaterial material) throws WxErrorException, IOException { + logger.debug("OkhttpMaterialUploadRequestExecutor is running"); if (material == null) { throw new WxErrorException(WxError.newBuilder().setErrorMsg("非法请求,material参数为空").build()); } @@ -33,21 +38,9 @@ public class OkhttpMaterialUploadRequestExecutor extends MaterialUploadRequestEx throw new FileNotFoundException(); } - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient()); - //设置代理 - if (requestHttp.getRequestHttpProxy() != null) { - clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy()); - } - //设置授权 - clientBuilder.authenticator(new Authenticator() { - @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword()); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - } - }); + //得到httpClient + + OkHttpClient client = requestHttp.getRequestHttpClient(); MultipartBody.Builder bodyBuilder = new MultipartBody.Builder() .setType(MediaType.parse("multipart/form-data")) @@ -60,7 +53,7 @@ public class OkhttpMaterialUploadRequestExecutor extends MaterialUploadRequestEx } Request request = new Request.Builder().url(uri).post(bodyBuilder.build()).build(); - Response response = clientBuilder.build().newCall(request).execute(); + Response response = client.newCall(request).execute(); String responseContent = response.body().string(); WxError error = WxError.fromJson(responseContent); if (error.getErrorCode() != 0) { diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVideoInfoRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVideoInfoRequestExecutor.java index 90c775ba..79dd12be 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVideoInfoRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVideoInfoRequestExecutor.java @@ -7,36 +7,26 @@ import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; import me.chanjar.weixin.mp.bean.material.WxMpMaterialVideoInfoResult; import me.chanjar.weixin.mp.util.http.MaterialVideoInfoRequestExecutor; import okhttp3.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; /** * Created by ecoolper on 2017/5/5. */ -public class OkhttpMaterialVideoInfoRequestExecutor extends MaterialVideoInfoRequestExecutor { +public class OkhttpMaterialVideoInfoRequestExecutor extends MaterialVideoInfoRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + public OkhttpMaterialVideoInfoRequestExecutor(RequestHttp requestHttp) { super(requestHttp); } @Override public WxMpMaterialVideoInfoResult execute(String uri, String materialId) throws WxErrorException, IOException { - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient()); - //设置代理 - if (requestHttp.getRequestHttpProxy() != null) { - clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy()); - } - //设置授权 - clientBuilder.authenticator(new Authenticator() { - @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword()); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - } - }); + logger.debug("OkhttpMaterialVideoInfoRequestExecutor is running"); //得到httpClient - OkHttpClient client = clientBuilder.build(); + OkHttpClient client = requestHttp.getRequestHttpClient(); RequestBody requestBody = new FormBody.Builder().add("media_id", materialId).build(); Request request = new Request.Builder().url(uri).post(requestBody).build(); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVoiceAndImageDownloadRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVoiceAndImageDownloadRequestExecutor.java index 1d0a5f7f..8c481391 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVoiceAndImageDownloadRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMaterialVoiceAndImageDownloadRequestExecutor.java @@ -7,62 +7,39 @@ import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; import me.chanjar.weixin.common.util.json.WxGsonBuilder; import me.chanjar.weixin.mp.util.http.MaterialVoiceAndImageDownloadRequestExecutor; import okhttp3.*; +import okio.BufferedSink; +import okio.Okio; import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; +import java.io.*; /** * Created by ecoolper on 2017/5/5. */ -public class OkhttpMaterialVoiceAndImageDownloadRequestExecutor extends MaterialVoiceAndImageDownloadRequestExecutor { +public class OkhttpMaterialVoiceAndImageDownloadRequestExecutor extends MaterialVoiceAndImageDownloadRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + public OkhttpMaterialVoiceAndImageDownloadRequestExecutor(RequestHttp requestHttp, File tmpDirFile) { super(requestHttp, tmpDirFile); } @Override public InputStream execute(String uri, String materialId) throws WxErrorException, IOException { - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient()); - //设置代理 - if (requestHttp.getRequestHttpProxy() != null) { - clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy()); - } - //设置授权 - clientBuilder.authenticator(new Authenticator() { - @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword()); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - } - }); - //得到httpClient - OkHttpClient client = clientBuilder.build(); - + logger.debug("OkhttpMaterialVoiceAndImageDownloadRequestExecutor is running"); + OkHttpClient client = requestHttp.getRequestHttpClient(); RequestBody requestBody = new FormBody.Builder().add("media_id", materialId).build(); Request request = new Request.Builder().url(uri).get().post(requestBody).build(); Response response = client.newCall(request).execute(); - - try (InputStream inputStream = new ByteArrayInputStream(response.body().bytes())) { - - // 下载媒体文件出错 - byte[] responseContent = IOUtils.toByteArray(inputStream); - String responseContentString = new String(responseContent, StandardCharsets.UTF_8); - if (responseContentString.length() < 100) { - try { - WxError wxError = WxGsonBuilder.create().fromJson(responseContentString, WxError.class); - if (wxError.getErrorCode() != 0) { - throw new WxErrorException(wxError); - } - } catch (com.google.gson.JsonSyntaxException ex) { - return new ByteArrayInputStream(responseContent); - } - } - return new ByteArrayInputStream(responseContent); + String contentTypeHeader = response.header("Content-Type"); + if ("text/plain".equals(contentTypeHeader)) { + String responseContent = response.body().string(); + throw new WxErrorException(WxError.fromJson(responseContent)); + } + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BufferedSink sink = Okio.buffer(Okio.sink(outputStream))) { + sink.writeAll(response.body().source()); + return new ByteArrayInputStream(outputStream.toByteArray()); } } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMediaImgUploadRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMediaImgUploadRequestExecutor.java index 3b10f63b..f8e58592 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMediaImgUploadRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpMediaImgUploadRequestExecutor.java @@ -7,6 +7,8 @@ import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo; import me.chanjar.weixin.mp.bean.material.WxMediaImgUploadResult; import me.chanjar.weixin.mp.util.http.MediaImgUploadRequestExecutor; import okhttp3.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; @@ -14,7 +16,8 @@ import java.io.IOException; /** * Created by ecoolper on 2017/5/5. */ -public class OkhttpMediaImgUploadRequestExecutor extends MediaImgUploadRequestExecutor { +public class OkhttpMediaImgUploadRequestExecutor extends MediaImgUploadRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); public OkhttpMediaImgUploadRequestExecutor(RequestHttp requestHttp) { super(requestHttp); @@ -22,21 +25,9 @@ public class OkhttpMediaImgUploadRequestExecutor extends MediaImgUploadRequestEx @Override public WxMediaImgUploadResult execute(String uri, File file) throws WxErrorException, IOException { - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient()); - //设置代理 - if (requestHttp.getRequestHttpProxy() != null) { - clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy()); - } - //设置授权 - clientBuilder.authenticator(new Authenticator() { - @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword()); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - } - }); + logger.debug("OkhttpMediaImgUploadRequestExecutor is running"); + //得到httpClient + OkHttpClient client = requestHttp.getRequestHttpClient(); RequestBody body = new MultipartBody.Builder() .setType(MediaType.parse("multipart/form-data")) @@ -46,7 +37,7 @@ public class OkhttpMediaImgUploadRequestExecutor extends MediaImgUploadRequestEx .build(); Request request = new Request.Builder().url(uri).post(body).build(); - Response response = clientBuilder.build().newCall(request).execute(); + Response response = client.newCall(request).execute(); String responseContent = response.body().string(); WxError error = WxError.fromJson(responseContent); if (error.getErrorCode() != 0) { diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpQrCodeRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpQrCodeRequestExecutor.java index f401b021..2f9bcc74 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpQrCodeRequestExecutor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/okhttp/OkhttpQrCodeRequestExecutor.java @@ -9,6 +9,10 @@ import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket; import me.chanjar.weixin.mp.util.http.QrCodeRequestExecutor; import okhttp3.*; +import okio.BufferedSink; +import okio.Okio; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.ByteArrayInputStream; import java.io.File; @@ -19,31 +23,18 @@ import java.util.UUID; /** * Created by ecoolper on 2017/5/5. */ -public class OkhttpQrCodeRequestExecutor extends QrCodeRequestExecutor { +public class OkhttpQrCodeRequestExecutor extends QrCodeRequestExecutor { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + public OkhttpQrCodeRequestExecutor(RequestHttp requestHttp) { super(requestHttp); } @Override public File execute(String uri, WxMpQrCodeTicket data) throws WxErrorException, IOException { - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().connectionPool(requestHttp.getRequestHttpClient()); - //设置代理 - if (requestHttp.getRequestHttpProxy() != null) { - clientBuilder.proxy(requestHttp.getRequestHttpProxy().getProxy()); - } - //设置授权 - clientBuilder.authenticator(new Authenticator() { - @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic(requestHttp.getRequestHttpProxy().getProxyUsername(), requestHttp.getRequestHttpProxy().getProxyPassword()); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - } - }); + logger.debug("OkhttpQrCodeRequestExecutor is running"); //得到httpClient - OkHttpClient client = clientBuilder.build(); - + OkHttpClient client = requestHttp.getRequestHttpClient(); Request request = new Request.Builder().url(uri).get().build(); Response response = client.newCall(request).execute(); String contentTypeHeader = response.header("Content-Type"); @@ -51,8 +42,10 @@ public class OkhttpQrCodeRequestExecutor extends QrCodeRequestExecutor