文档章节

HttpClient 使用代理完全版本

xuhuazi
 xuhuazi
发布于 2017/01/11 17:49
字数 419
阅读 135
收藏 0

import com.unionpay.spiderframework.spiderframework.common.util.Config;

import org.apache.commons.io.IOUtils;

import org.apache.http.*;

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.entity.GzipDecompressingEntity;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

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.LayeredConnectionSocketFactory;

import org.apache.http.conn.socket.PlainConnectionSocketFactory;

import org.apache.http.conn.ssl.SSLConnectionSocketFactory;

import org.apache.http.impl.client.*;

import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

import org.apache.http.message.BasicNameValuePair;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

public class IHttpClient {

private final static Logger LOGGER = LoggerFactory.getLogger(IHttpClient.class);
private static PoolingHttpClientConnectionManager cm = null;
// 代理服务器
private static final String ProxyHost = Config.get("proxy.host");
private static final Integer ProxyPort = Config.getInt("proxy.port");
// 代理隧道验证信息
private static final String ProxyUser = Config.get("proxy.user");
private static final String ProxyPass = Config.get("proxy.passord");
private static CredentialsProvider credsProvider = null;
private static RequestConfig requestConfig = null;

static {
    ConnectionSocketFactory plainsf = PlainConnectionSocketFactory.getSocketFactory();
    LayeredConnectionSocketFactory sslsf = SSLConnectionSocketFactory.getSocketFactory();
    Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
            .register("http", plainsf)
            .register("https", sslsf)
            .build();
    cm = new PoolingHttpClientConnectionManager(registry);
    cm.setMaxTotal(Config.getInt("httpclient.pool.max.connection"));
    cm.setDefaultMaxPerRoute(Config.getInt("httpclient.pool.max.route"));

    credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(
            new AuthScope(ProxyHost, ProxyPort),
            new UsernamePasswordCredentials(ProxyUser, ProxyPass));

    requestConfig = RequestConfig.custom()
            .setConnectTimeout(100000)
            .setConnectionRequestTimeout(Config.getInt("httpclient.request.timeout"))
            .setSocketTimeout(Config.getInt("httpclient.socket.timeout"))
            .setProxy(new HttpHost("120.52.73.98", 8082))
            .build();

}

/**
 * 处理response
 *
 * [@param](https://my.oschina.net/u/2303379) httpResponse
 * [@return](https://my.oschina.net/u/556800)
 */
private static CloseableHttpResponse handleResponse(CloseableHttpResponse httpResponse) {

    Header ceheader = httpResponse.getEntity().getContentEncoding();
    if (ceheader != null) {
        HeaderElement[] codecs = null;
        codecs = ceheader.getElements();
        for (int i = 0; i < codecs.length; i++) {
            if (codecs[i].getName().equalsIgnoreCase("gzip")) {
                httpResponse.setEntity(new GzipDecompressingEntity(httpResponse.getEntity()));
            }
        }
    }
    return httpResponse;
}

public static void main(String[] args) throws IOException {
    HttpGet httpGet = new HttpGet("http://1212.ip138.com/ic.asp");
    List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    nvps.add(new BasicNameValuePair("method", "next"));
    nvps.add(new BasicNameValuePair("params", "{\"topic_id\":1740,\"offset\":0,\"hash_id\":\"1\"}"));
    boolean flag = true;
    CloseableHttpClient httpClient = null;
    httpGet.setConfig(requestConfig);
    if (!flag) {
        httpClient = HttpClients.custom().setRetryHandler(new DefaultHttpRequestRetryHandler(3, true))
                .setDefaultCredentialsProvider(credsProvider)
                .setConnectionManager(cm).build();
    } else {
        httpClient = HttpClientBuilder.create().setRetryHandler(new DefaultHttpRequestRetryHandler(3, true))
                .setConnectionManager(cm)
                .build();
    }
    CloseableHttpResponse httpResponse = null;
    try {
        httpResponse = httpClient.execute(httpGet);
        int statusCode = httpResponse.getStatusLine().getStatusCode();
        if (statusCode != 200) {
            System.out.println("第{}次请求{}返回{}");
        } else {
            handleResponse(httpResponse);
            HttpEntity httpEntity = httpResponse.getEntity();
            InputStream in = httpEntity.getContent();
            String response = IOUtils.toString(in, "gb2312");
            in.close();
            System.out.println("aaaaaaaaaa" + response);
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    } finally {
        try {
            if (httpResponse != null)
                httpResponse.close();
        } catch (IOException e) {
        }

    }
}

}

© 著作权归作者所有

xuhuazi
粉丝 2
博文 9
码字总数 7615
作品 0
杭州
程序员
私信 提问
HttpComponents HttpClient 4.2.3 GA 发布

HttpComponents HttpClient 4.2.3 GA 主要是修复了 4.2.2 中发现的问题,同时完全重构了 NTLM 认证引擎,更好的兼容新的 Windows 版本。 HttpComponents也就是以前的httpclient项目,可以用来...

oschina
2013/01/16
1K
1
Apache HttpComponents 4.5.7 GA 发布

Apache HttpComponents 4.5.7 GA 版本发布了,HttpComponents 也就是以前的 HttpClient项目,它提供了一些高效、功能丰富的编程工具包,用以支持 HTTP 协议的客户端/服务器,同时 HttpCompon...

h4cd
01/26
738
1
HttpClient 4.0.2 (GA) 发布

HttpClient 可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端/服务器编程工具包,并且它支持 HTTP 协议最新的版本和建议。 以下列出的是 HttpClient 提供的主要的功能,要知道...

红薯
2010/09/10
1K
0
HttpComponents HttpClient 4.3.2 发布

HttpComponents HttpClient 4.3.2 发布,这是一个维护版本,主要是 bug 修复。详情请看发行说明。 HttpComponents也就是以前的httpclient项目,可以用来提供高效的、最新的、功能丰富的支持 ...

oschina
2014/01/21
2.2K
3
HttpComponents HttpClient 4.3.1 GA 发布

HttpComponents HttpClient 4.3.1 GA 主要是修复 4.3 版本中关于 SSL 安全方面的处理 bug,该 bug 可导致潜在的 SSL 中间人攻击。 HttpComponents也就是以前的httpclient项目,可以用来提供高...

oschina
2013/10/09
2.7K
9

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
43
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部