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

摘要:
=Null){HttpEntityentity=response.getEntity();//如果(entity!=Null){httpClient.close();}}4.如何在实际开发中获得代理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

免责声明:文章转载自《HttpClient(四)-- 使用代理IP 和 超时设置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ovn-kubernetes安装指南VueX中state变化捕捉不到_getters监测不到state的变化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

最大堆(优先队列)基本概念,即一个完整建立,插入,删除代码

堆(优先队列)priority queue特殊的队列,取出元素的顺序是依照元素的优先权(关键字)大小,而出元素进入队列的先后顺序操作:查找最大值(最小值),删除(最大值) 数组:链表:有序数组:有序链表: 采用二叉搜索树? NO 采用完全二叉树 YES堆的连个特性结构性:用数组表示的完全二叉树:有序性:任一结点的关键字是其字树所有结点的最大值(或最小值)...

java-response-乱码解决

(1)响应体设置文本 PrintWriter getWriter() 获得字符流,通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览   器端。 关于设置中文的乱码问题 原因:response缓冲区的默认编码是iso8859-1,此码表中...

HTTP认证方式与https简介

HTTP认证与https简介# HTTP请求报头: Authorization    [ˌɔ:θəraɪˈzeɪʃn] HTTP响应报头: WWW-Authenticate    [ɔ:ˈθentɪkeɪt] HTTP认证是基于质询/回应(challenge/response)的认证模式。 HTTP认证 BASIC认证 BASIC认证概述 当一个客户端向...

将文件以流的形式另存为下载

//【1】附件为本地磁盘路径(附件可以为图片、pdf、word等等)string strFile = Server.MapPath("/images/526763.pdf"); using (FileStream fs = new FileStream(strFile, FileMode.Open)) { byte[] bytes = new b...

单链表选择排序

单链表有多种排序的方法,今天先来说下用选择排序给一个单链表排序。 先来复习下什么是选择排序吧。选择排序,第一次用第一个值与其他值比较,找到最大的交换;第二次循环到第二个值,以此类推到最后一个值,此时,就已经有序。 int main() { int temp,k; int i,j; int a[5]={1,2,3,4,5};...

NODE_ENV判断node服务器环境的设置

build->webpack.sit.conf.js 拷贝webpack.prod.conf.js,新建webpack.sit.conf.js、webpack.uait.conf.js,根据环境修改env的引入文件 config->sit.env.js build->bulid.js src -> config文件夹 -&...