HttpClient(四)-- 使用代理IP 和 超时设置

1.代理IP的用处:

  在爬取网页的时候,有的目标站点有反爬虫机制,对于频繁访问站点以及规则性访问站点的行为,会采集屏蔽IP措施。这时候,就可以使用代理IP,屏蔽一个就换一个IP。

2.代理IP分类:

  代理IP的话 也分几种: 透明代理、匿名代理、混淆代理、高匿代理,一般使用高匿代理。

3.使用 RequestConfig.custom().setProxy(proxy).build() 来设置代理IP:

public static void main(String[] args) throws ClientProtocolException, IOException {
        // 创建httpClient实例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建httpGet实例
        HttpGet httpGet = new HttpGet("http://www.tuicool.com");
        // 设置代理IP,设置连接超时时间 、 设置 请求读取数据的超时时间 、 设置从connect Manager获取Connection超时时间、
        HttpHost proxy = new HttpHost("122.228.25.97", 8101);
        RequestConfig requestConfig = RequestConfig.custom()
                .setProxy(proxy)
                .setConnectTimeout(10000)
                .setSocketTimeout(10000)
                .setConnectionRequestTimeout(3000)
                .build();
        httpGet.setConfig(requestConfig);
        // 设置请求头消息
        httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0");
        CloseableHttpResponse response = httpClient.execute(httpGet);
        
        if(response != null){
            HttpEntity entity = response.getEntity();  // 获取返回实体
            if(entity != null){
                System.out.println("网页内容为:" + EntityUtils.toString(entity, "utf-8"));
            }
        }
        if(response != null){
            response.close();
        }
        if(httpClient != null){
            httpClient.close();
        }
    }

 4.实际开发中 我们是怎样获取到代理IP的呢?

  我们可以使用HttpClient来 爬取 http://www.xicidaili.com/ 上最新的20条的高匿代理IP,来保存到 链表中,当一个IP被屏蔽之后获取连接超时时,就接着取出 链表中的一个IP,以此类推,可以判断当链表中的数量小于5的时候,就重新爬取 代理IP 来保存到链表中。

 5、HttpClient学习地址

  开源博客系统-HttpClient

 

posted @ 2017-09-13 23:02  小葱拌豆腐~  阅读(431)  评论(0编辑  收藏  举报