首页 文章

Java Apache HttpClient - 代理无响应

提问于
浏览
0

我遇到了一个使用Apache的Java HttpClient的简单程序的问题,其中从代理发送的所有请求都超时(java.net.ConnectException) . 我确保列表中的所有代理都能正常工作,所以这不是问题所在 . 这是我的代码:

HttpHost proxy = new HttpHost(ip, port, "http"); // the vars ip and port are taken from the function this is in
DefaultHttpClient httpclient = new DefaultHttpClient();
final HttpGet request = new HttpGet(
        "http://www.mysitehere.com"); // And yes, my url works and is not timing out from browser
request.addHeader(
        "User-Agent",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36");
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
        proxy);
HttpResponse response = httpclient.execute(request); // This code times out.

非常感谢任何帮助,谢谢!

编辑:示例ip和端口:

"101.96.11.10":"80"

1 回答

  • 0

    您可以使用 DynamicProxyRoutePlanner 为每个请求指定代理:

    PoolingHttpClientConnectionManager http
    ...
            this.http = new PoolingHttpClientConnectionManager();
            this.http.setMaxTotal(10);
            this.http.setDefaultMaxPerRoute(10);
            this.http.setValidateAfterInactivity(10000);
    ...
    HttpHost proxy = new HttpHost(ADDRESS, PORT);
    DynamicProxyRoutePlanner routePlanner = new DynamicProxyRoutePlanner(proxy);
    HttpClients.custom()
                    .setConnectionManager(http)
                    .setDefaultRequestConfig(getRequestConfig(timeout))
                    .setRoutePlanner(routePlanner)
                    .setConnectionManagerShared(true)
                    .build();
    ...
    private static RequestConfig getRequestConfig(int timeout) {
        return RequestConfig.copy( RequestConfig.DEFAULT )
        .setConnectTimeout( timeout )
        .setConnectionRequestTimeout( timeout )
        .setSocketTimeout( timeout )
        .setContentCompressionEnabled( true )
        .setRedirectsEnabled( true )
        .setMaxRedirects( 10 )
        .build();
    }
    

相关问题