|
@@ -0,0 +1,62 @@
|
|
|
+package cn.nosum.http.jodd;
|
|
|
+
|
|
|
+
|
|
|
+import cn.nosum.http.RequestHttp;
|
|
|
+import cn.nosum.http.ResponseHandler;
|
|
|
+import cn.nosum.http.SimpleDownloadRequestExecutor;
|
|
|
+import cn.nosum.http.exception.HttpErrorException;
|
|
|
+import cn.nosum.http.proxy.HttpResponseProxy;
|
|
|
+import jodd.http.HttpConnectionProvider;
|
|
|
+import jodd.http.HttpRequest;
|
|
|
+import jodd.http.HttpResponse;
|
|
|
+import jodd.http.ProxyInfo;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+
|
|
|
+import java.io.ByteArrayInputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
+import java.io.OutputStream;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * JODD 下载请求封装.
|
|
|
+ *
|
|
|
+ * @author Young
|
|
|
+ */
|
|
|
+public class JoddDownloadRequestExecutor extends SimpleDownloadRequestExecutor<HttpConnectionProvider, ProxyInfo> {
|
|
|
+
|
|
|
+ public JoddDownloadRequestExecutor(RequestHttp<HttpConnectionProvider, ProxyInfo> requestHttp) {
|
|
|
+ super(requestHttp);
|
|
|
+ }
|
|
|
+
|
|
|
+ public JoddDownloadRequestExecutor(RequestHttp<HttpConnectionProvider, ProxyInfo> requestHttp, ResponseHandler<OutputStream> responseHandler) {
|
|
|
+ super(requestHttp, responseHandler);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public OutputStream doExecute(String uri, String data) throws HttpErrorException, IOException {
|
|
|
+ HttpRequest request = HttpRequest.get(uri);
|
|
|
+ if (requestHttp.getRequestHttpProxy() != null) {
|
|
|
+ requestHttp.getRequestHttpClient().useProxy(requestHttp.getRequestHttpProxy());
|
|
|
+ }
|
|
|
+ request.withConnectionProvider(requestHttp.getRequestHttpClient());
|
|
|
+
|
|
|
+ HttpResponse response = request.send();
|
|
|
+ response.charset(StandardCharsets.UTF_8.name());
|
|
|
+
|
|
|
+ String contentType = response.header("Content-Type");
|
|
|
+ // application/json; encoding=utf-8 下载媒体文件出错
|
|
|
+ if (contentType != null && contentType.startsWith("application/json")) {
|
|
|
+ throw new HttpErrorException(response.bodyText());
|
|
|
+ }
|
|
|
+
|
|
|
+ String fileName = new HttpResponseProxy(response).getFileName();
|
|
|
+ if (StringUtils.isBlank(fileName)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ try (InputStream inputStream = new ByteArrayInputStream(response.bodyBytes())) {
|
|
|
+ return transfer(inputStream);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|