1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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);
- }
- }
- }
|