package org.happy.downloader;
import java.io.IOException;
import java.util.Date;
import org.apache.http.HttpHost;
import org.apache.http.client.config.CookieSpecs;
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.methods.RequestBuilder;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.config.SocketConfig;
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.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import org.junit.Before;
import org.junit.Test;
public class ProxyTest {
CloseableHttpClient httpClients;
HttpHost proxy;
@Before
public void setUp(){
proxy = new HttpHost("118.144.50.220", 3128);
httpClients = generateClient();
}
CloseableHttpClient generateClient(){
Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(reg);
connectionManager.setDefaultMaxPerRoute(100);
connectionManager.setMaxTotal(500);
SocketConfig socketConfig = SocketConfig.custom()
.setSoKeepAlive(true)
.setTcpNoDelay(true)
.build();
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(8000)
.setSocketTimeout(8000)
.setConnectTimeout(8000)
.setCookieSpec(CookieSpecs.DEFAULT)
.build();
return HttpClients.custom()
.setConnectionManager(connectionManager)
.setDefaultSocketConfig(socketConfig)
.setDefaultRequestConfig(requestConfig)
.build();
}
@Test
public void test(){
boolean proxyFail = true;
System.out.println("start at : "+new Date());
RequestConfig rconf = RequestConfig.custom()
.setConnectionRequestTimeout(8000)
.setSocketTimeout(8000)
.setConnectTimeout(8000)
.setProxy(proxy)
.build();
HttpUriRequest httpUriRequest = RequestBuilder
.get("htt
HttpClient 使用proxy 设置了connectionTimeout, socketTimeout 还是无限等待
最新推荐文章于 2024-08-28 16:34:26 发布
博客探讨了使用HttpClient时遇到的问题,即设置了connectionTimeout和socketTimeout但依然发生无限等待的情况。该问题在某些情况下表现不一致,经分析发现可能的原因是SSL握手过程中的死锁。解决方案提出了在httpclient中实现失败重试机制来应对这个问题。
摘要由CSDN通过智能技术生成