您的位置: 首页 > 新闻资讯 > > 正文

HttpClient使用Ip代理与处理连接超时怎么办?

发布时间:2020年01月06日 来源:互联网

    其实前面写的那一点点东西都是轻轻点水,其实HttpClient还有很多强大的功能:

HttpClient使用Ip代理与处理连接超时怎么办?

    (1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)


    (2)支持自动转向


    (3)支持 HTTPS 协议


    (4)支持代理服务器等


    一、HttpClient使用代理IP


    1.1、前言


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


    这时候,代理IP就派上用场了。可以使用代理IP,屏蔽一个就换一个IP。


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


    1.2、几种代理IP


    1)透明代理(Transparent Proxy)


    REMOTE_ADDR = Proxy IP


    HTTP_VIA = Proxy IP


    HTTP_X_FORWARDED_FOR = Your IP


    透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到你是谁。


    2)匿名代理(Anonymous Proxy)


    REMOTE_ADDR = proxy IP


    HTTP_VIA = proxy IP


    HTTP_X_FORWARDED_FOR = proxy IP


    匿名代理比透明代理进步了一点:别人只能知道你用了代理,无法知道你是谁。


    还有一种比纯匿名代理更先进一点的:混淆代理


    3)混淆代理(Distorting Proxies)


    REMOTE_ADDR = Proxy IP


    HTTP_VIA = Proxy IP


    HTTP_X_FORWARDED_FOR = Random IP address


    如上,与匿名代理相同,如果使用了混淆代理,别人还是能知道你在用代理,但是会得到一个假的IP地址,伪装的更逼真。


    4)高匿代理(Elite proxy或High Anonymity Proxy)


    REMOTE_ADDR = Proxy IP


    HTTP_VIA = not determined


    HTTP_X_FORWARDED_FOR = not determined


    可以看出来,高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。


    一般我们搞爬虫 用的都是 高匿的代理IP;


    那代理IP 从哪里搞呢 很简单 百度一下,你就知道 一大堆代理IP站点。 一般都会给出一些免费的,但是花点钱搞收费接口更加方便。


    1.3、实例来使用代理Ip


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


    复制代码


    package com.jxlg.study.httpclient;


    import com.sun.org.apache.regexp.internal.RE;


    import org.apache.http.HttpEntity;


    import org.apache.http.HttpHost;


    import org.apache.http.client.config.RequestConfig;


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


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


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


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


    import org.apache.http.util.EntityUtils;


    import java.io.IOException;


    public class UseProxy {


    public static void main(String[] args) throws IOException {


    //创建httpClient实例


    CloseableHttpClient httpClient = HttpClients.createDefault();


    //创建httpGet实例


    HttpGet httpGet = new HttpGet("http://www.tuicool.com");


    //设置代理IP,设置连接超时时间 、 设置 请求读取数据的超时时间 、 设置从connect Manager获取Connection超时时间、


    HttpHost proxy = new HttpHost("58.60.255.82",8118);


    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 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36");


    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();


    }


    }


    }


    复制代码


    1.4、实际开发中怎么去获取代理ip


    我们可以使用HttpClient来 爬取 http://www.xicidaili.com/ 上最新的20条的高匿代理IP,来保存到 链表中,当一个IP被屏蔽之后获取连接超时时,


    就接着取出 链表中的一个IP,以此类推,可以判断当链表中的数量小于5的时候,就重新爬取 代理IP 来保存到链表中。


    1.5、HttpClient连接超时及读取超时


    httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间;


    1)HttpClient连接时间


    所谓连接的时候 是HttpClient发送请求的地方开始到连接上目标url主机地址的时间,理论上是距离越短越快,


    线路越通畅越快,但是由于路由复杂交错,往往连接上的时间都不固定,运气不好连不上,HttpClient的默认连接时间,据我测试,


    默认是1分钟,假如超过1分钟 过一会继续尝试连接,这样会有一个问题 假如遇到一个url老是连不上,会影响其他线程的线程进去,说难听点,


    就是蹲着茅坑不拉屎。所以我们有必要进行特殊设置,比如设置10秒钟 假如10秒钟没有连接上 我们就报错,这样我们就可以进行业务上的处理,


    比如我们业务上控制 过会再连接试试看。并且这个特殊url写到log4j日志里去。方便管理员查看。


    2)HttpClient读取时间


    所谓读取的时间 是HttpClient已经连接到了目标服务器,然后进行内容数据的获取,一般情况 读取数据都是很快速的,


    但是假如读取的数据量大,或者是目标服务器本身的问题(比如读取数据库速度慢,并发量大等等..)也会影响读取时间。


    同上,我们还是需要来特殊设置下,比如设置10秒钟 假如10秒钟还没读取完,就报错,同上,我们可以业务上处理。


    比如我们这里给个地址 http://central.maven.org/maven2/,这个是国外地址 连接时间比较长的,而且读取的内容多 。很容易出现连接超时和读取超时。


    我们如何用代码实现呢?


    HttpClient给我们提供了一个RequestConfig类 专门用于配置参数比如连接时间,读取时间以及前面讲解的代理IP等。


    例子:


    复制代码


    package com.jxlg.study.httpclient;


    import org.apache.http.HttpEntity;


    import org.apache.http.client.config.RequestConfig;


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


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


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


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


    import org.apache.http.util.EntityUtils;


    import java.io.IOException;


    public class TimeSetting {


    public static void main(String[] args) throws IOException {


    CloseableHttpClient httpClient = HttpClients.createDefault();


    HttpGet httpGet = new HttpGet("http://central.maven.org/maven2/");


    RequestConfig config = RequestConfig.custom()


    .setConnectTimeout(5000)


    .setSocketTimeout(5000)


    .build();


    httpGet.setConfig(config);


    httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36");


    CloseableHttpResponse response = httpClient.execute(httpGet);


    if (response != null){


    HttpEntity entity = response.getEntity();


    System.out.println("网页内容为:"+ EntityUtils.toString(entity,"UTF-8"));


    }


    if (response != null){


    response.close();


    }


    if (httpClient != null){


    httpClient.close();


    }


    }


    }


相关文章内容简介

1 免费代理IP能用于爬虫吗

    免费代理IP能用于爬虫吗?免费代理IP就是不需要花钱,在网络上可以直接提取,然后用来替换IP。并不是所有项目都能用免费代理IP的,例如爬虫就不可以。    免费代理IP的来源比较杂,很多没有用,使用时间短,匿名程度也参差不齐,其中有一些是高度匿名的,但数量有限,也很难挑选。而爬虫工作需要的IP,要求比较高,因为爬虫IP一旦质量不高就会被对方网站发现,被禁止抓取数据,无法完成工作。所以,免费代理IP是不适合爬虫的。但如果免费代理IP的匿名程度够的话,使用效率低,也是符合使用需求的。    爬虫大家都知道,是采集数据的方式。通过采集来的数据分析,可以获取有价值的信息。而代理IP是换IP最方便的工具,爬虫工作是要用代理IP的。    爬虫对被爬的网站来说是毫无利益的,反而会影响到服务器的工作,所以现在都设有反爬程序,IP限制是最基本的。爬虫工作的时候,如果速度快,用同一个IP会有访问的问题,这时网络就会有验证或者直接封锁IP,给爬虫工作带来了很大的困难。 ... [阅读全文]

2 发帖用代理IP有什么好处?

    发帖用代理IP有什么好处?发帖是网络营销的主要途径,在发帖的时候,很多时候都要用到代理IP,这并不奇怪,代理IP给网络营销人员带来了很大的便利。那么,发帖用代理IP有什么好处?    贴吧大家都不陌生,很多人在贴吧交流,一般同一个IP只能发布有限的帖子,评论也是有限制的。如果想大量发帖,就需要用代理IP来解决了。有很多热帖有的是真实评论,有的可能需要代理IP来帮忙,用代理IP去访问网站,用户不会被网站监视限制,或者被封锁了。    随着网络的发展,网络营销是很多公司必须要做的,其中网络影响最重要的途径就是发帖。很多发帖的工作人员都在使用代理IP,但还有很多人并不了解。那么,营销发帖一定要用代理IP吗?    例如贴吧、微博等平台,这些平台发帖可以与其他网友进行交流,起到宣传的作用。但一个IP发帖的数量是有限的,如果想大量发帖,就需要代理IP的帮助。更换IP后,就可以伪装成一个全新的用户,自然不会被平台限制。还有网络营销最常见的问答方式,也需要更换IP后进行自问... [阅读全文]

推荐阅读

  1. 16

    2020-11

    连接代理IP时为什么总是返回407报错?

    众所周知,万变代理IP支持两种授权方式,分别是终端IP授权和“用户名+密码”授权。“终端IP授权“模式使用方法详见《如何绑定终端IP进行授权使用代理IP》,“用户名+密码“授权模式使用方

  2. 18

    2021-03

    SOCKS5代理安全怎么分等级?

    基于Socks协议,Socks5代理是一种代理模式。它中,5代表协议的版本号。通过socks5代理服务器,可以使局域网上的计算机访问外部网的内容。因为是在传输层上工作,所以支持TCP和UDP的数据传输。

  3. 16

    2021-03

    怎么保护反向代理IP?

    反向代理ip服务器会强制将外部网络访问传递给要代理的服务器,因此反向代理服务器负责接收客户端的请求,然后从源服务器获取内容,将内容返回给用户,并将内容保存到本地,以便以后再

  4. 08

    2020-09

    代理IP的稳定时长和有效期是什么?

    经常有人问,代理IP的稳定性怎么样,代理IP能稳定多长时间,代理IP的有效期是多少,代理IP的存活时间是多少?今天我们就一起来分析分析。

  5. 12

    2020-10

    为什么说代理IP很重要

    越来越多的网络工作者离不开代理IP了,作为一个极其重要的网络“工具”,它不仅仅能够起到连接外部互联网和局域网,保证网络系统正常运行的作用,还能够保护自己的网络信息安全。

  6. 16

    2020-04

    扫描仪https代理服务器是什么基本概念?

    检测QQ登录状况体系分析第一种是应用童真 ip 数据库,这一可以在互联网上找寻很多,但缺点是升級有点慢。第二种是应用门户网站的插孔,有腾讯、新浪、网易网游、搜狐和Google出示互联网ip

因为专业! 所以简单! 产品至上,价格实惠 是我们服务追求的宗旨

免费试用