zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java面试:用set集合的时候,重写过hashcode()和equal()方法吗?有什么作用?
    Bootstrap起步
    Java NIO
    Dobbo和SpringCloud区别
    Java虚拟机类加载机制和双亲委派模型
    继承和组合的特点和区别
    LinkedList和ArrayList底层原理
    聚集索引和非聚集索引
    Stream和迭代器的区别
    悲观锁和乐观锁
  • 原文地址:https://www.cnblogs.com/xbq8080/p/7518225.html
Copyright © 2011-2022 走看看