![JAR search and dependency download from the Maven repository](/logo.png)
com.gitee.summer9102.develop.common.httpclient.ProxyHttpClientUtil Maven / Gradle / Ivy
package com.gitee.summer9102.develop.common.httpclient;
import org.apache.http.Consts;
import org.apache.http.HttpHost;
import org.apache.http.HttpStatus;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
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.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.TimeUnit;
public class ProxyHttpClientUtil {
//发送请求的客户端单例
private CloseableHttpClient httpClient;
//连接池管理器
private PoolingHttpClientConnectionManager connectionManager;
//请求设置
private RequestConfig requestConfig;
//相当于线程锁,用于线程安全
private final static Object syncLock = new Object();
//代理
private HttpHost proxy;
//凭证
private CredentialsProvider provider;
public ProxyHttpClientUtil(String proxyHost, int proxyPort, String proxyUser, String proxyPass, int httpMaxPoolSize, int connectTimeout, int socketTimeout, int maxIdleTime) {
try {
Registry socketFactoryRegistry = RegistryBuilder.create()
.register("https", new SSLConnectionSocketFactory(SSLContext.getDefault()))
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.build();
connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
// 最大连接数
connectionManager.setMaxTotal(httpMaxPoolSize);
// 路由最大连接数
connectionManager.setDefaultMaxPerRoute(httpMaxPoolSize);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
proxy = new HttpHost(proxyHost, proxyPort);
provider = new BasicCredentialsProvider();
provider.setCredentials(new AuthScope(proxy), new UsernamePasswordCredentials(proxyUser, proxyPass));
requestConfig = RequestConfig.custom()
.setProxy(proxy)
// 获取连接超时时间
.setConnectionRequestTimeout(connectTimeout)
// 连接建立超时时间
.setConnectTimeout(connectTimeout)
// 获取数据超时时间
.setSocketTimeout(socketTimeout)
.build();
httpClient = initHttpClient(maxIdleTime);
}
private CloseableHttpClient initHttpClient(int maxIdleTime) {
synchronized (syncLock) {
if (httpClient == null) {
return HttpClients.custom()
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(requestConfig)
.setDefaultCredentialsProvider(provider)
//清理超过空闲时间的连接
.evictIdleConnections(maxIdleTime > 0 ? maxIdleTime : 30000, TimeUnit.MILLISECONDS)
.build();
}
return httpClient;
}
}
public CloseableHttpClient getHttpClient() {
if (httpClient == null) {
httpClient = initHttpClient(30000);
}
return httpClient;
}
public String requestToString(HttpUriRequest request) {
String result = null;
CloseableHttpResponse response = null;
try {
//开启HttpClient
response = getHttpClient().execute(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
result = EntityUtils.toString(response.getEntity(), Consts.UTF_8);
}
return result;
} catch (Exception e) {
return null;
} finally {
HttpClientUtils.closeQuietly(response);
}
}
public byte[] requestToByteArray(HttpUriRequest request) {
byte[] result = null;
CloseableHttpResponse response = null;
try {
//开启HttpClient
response = getHttpClient().execute(request);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
result = EntityUtils.toByteArray(response.getEntity());
}
return result;
} catch (Exception e) {
return null;
} finally {
HttpClientUtils.closeQuietly(response);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy