通过httpClient设置代理Ip
背景:
我们有个车管系统,需要定期的去查询车辆的违章,之前一直是调第三方接口去查,后面发现数据不准确(和深圳交警查的对不上),问题比较多。于是想干脆直接从深圳交警上查,那不就不会出问题了吗,但是问题又来了,因为车比较多,一次查的数据量很大,如果同时间段大批量请求深圳交警可能会导致ip被他们那边封禁,那有什么解决办法呢?
解决方案:
网上查了很多资料,大致讲的就是设置代理ip,然后通过代理ip去访问。
设置代理ip:
设置代理ip的方式有很多种,我这里讲其中一种,通过httpClient设置代理Ip,httpClient我想大家都不陌生了吧,它几乎封装了所有的http请求方法,当然其中也提供了设置代理ip的方法,废话不多说,直接上代码。
@Test
public void test() throws Exception{
//创建httpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建httpGet实例
HttpPost httpPost = new HttpPost("请求地址");
//设置代理IP,设置连接超时时间 、 设置 请求读取数据的超时时间 、 设置从connect Manager获取Connection超时时间、
HttpHost proxy = new HttpHost("125.77.49.244", 808); List<NameValuePair> params = new ArrayList<NameValuePair>(); //设置请求参数
params.add(new BasicNameValuePair("car_number", "粤B123456"));
params.add(new BasicNameValuePair("licensePlateNo", "粤B123456")); HttpEntity entitys = new UrlEncodedFormEntity(params, "UTF-8"); RequestConfig requestConfig = RequestConfig.custom()
.setProxy(proxy)
.setConnectTimeout(10000)
.setSocketTimeout(10000)
.setConnectionRequestTimeout(3000)
.build();
httpPost.setConfig(requestConfig);
httpPost.setEntity(entitys);
//设置请求头消息
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); CloseableHttpResponse response = httpClient.execute(httpPost);
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();
}
} 这里讲一下另外一种设置代理ip的方案,直接上代码
@Test
public void test3() throws Exception{
System.getProperties().setProperty("proxySet","true");
System.getProperties().setProperty("http.proxyHost","60.191.201.38"); //设置ip
System.getProperties().setProperty("http.proxyPort","45461"); //设置端口号 Document cocument = Jsoup.connect("http://127.0.0.1:8082/newAtb/indexData.do").ignoreContentType(true).post();
} 至于代理ip,有很多种获取方式,大部分需要花钱买,免费的很少,这里给大家一个网站 http://www.xicidaili.com/,这个网站每天都会更新免费的代理ip,我们可以定期去上面爬取数据到本地供我们使用,这里贴上一段本人爬取ip的代码
public void setProxyIpList(){
try {
String rLine;
URL url = new URL("http://www.xicidaili.com/");
URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; NT 5.1; GTB5; .NET CLR 2.0.50727; CIBA)");
List<String> list = new ArrayList<>();
InputStreamReader inputStreamReader = new InputStreamReader(conn.getInputStream(),"utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
int a = 0;
do{
rLine = bufferedReader.readLine();
String reg1 = "\\d+"; //匹配端口号
String reg = "\\d+\\.\\d+\\.\\d+\\.\\d+"; //匹配ip
if(rLine.contains("<td>") ) {
rLine = rLine.substring(rLine.indexOf("<td>") + 4, rLine.indexOf("</td>"));
if (Pattern.matches(reg, rLine) || Pattern.matches(reg1, rLine)) {
list.add(rLine);
a++;
}
}
}while (a !=40); for (int i=0; i< list.size();i=i+2 ) {
IPort ip = new IPort();
ip.setIp(list.get(i));
ip.setPort(Integer.parseInt(list.get(i+1)));
listPort.add(ip);
} } catch (Exception e) {
e.printStackTrace();
logger.info("拉取代理ip异常:" + e.getMessage());
}
}
通过httpClient设置代理Ip的更多相关文章
- 解决httpclient设置代理ip之后请求无响应的问题
httpclient这个工具类对于大家来说应该都不陌生吧,最近在使用过程中出现了碰到一个棘手的问题,当请求的接口地址由http变成https之后,程序执行到 httpClient.execute(ht ...
- HttpClient使用代理IP
在爬取网页的时候,有的网站会有反爬虫措施,导致服务器请求拒接,可以使用代理IP来访问,解决请求拒绝的问题 代理IP分 透明代理.匿名代理.混淆代理.高匿代理 1.透明代理(Transparent Pr ...
- (四)HttpClient 使用代理 IP
第一节: HttpClient 使用代理 IP 在爬取网页的时候,有的目标站点有反爬虫机制,对于频繁访问站点以及规则性访问站点的行为,会采集屏蔽IP措施. 这时候,代理IP就派上用场了. 关于代理IP ...
- 爬虫-设置代理ip
1.为什么要设置代理ip 在学习Python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败.高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网 ...
- Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP
自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...
- Python爬虫常用小技巧之设置代理IP
设置代理IP的原因 我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站.假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问.所以你可以设置一些代理服务器来 ...
- python3 selenium模块Chrome设置代理ip的实现
python3 selenium模块Chrome设置代理ip的实现 selenium模块Chrome设置代理ip的实现代码: from selenium import webdriver chrome ...
- scrapy框架设置代理ip,headers头和cookies
[设置代理ip] 根据最新的scrapy官方文档,scrapy爬虫框架的代理配置有以下两种方法: 一.使用中间件DownloaderMiddleware进行配置使用Scrapy默认方法scrapy s ...
- HttpClient 设置代理方式
HttpClient httpClient = new HttpClient(); //设置代理服务器的ip地址和端口 httpClient.getHostConfiguration().setPro ...
随机推荐
- js毫秒数转天时分秒
formatDuring: function(mss) { var days = parseInt(mss / (1000 * 60 * 60 * 24)); var hours = pars ...
- redux【react】
首先介绍一下redux就是Flux的一种进阶实现.它是一个应用数据流框架,主要作用应用状态的管理 一.设计思想: (1).web应用就是一个状态机,视图和状态一一对应 (2).所有的状态保存在一个对象 ...
- Ubuntu16.04.3深度学习环境搭建
依赖 pip3 install pillow 安装numpy相关sudo apt-get install python-numpy python-scipy python-matplotlib ipy ...
- 搭建服务器上的GIT并实现自动同步到站点目录(www)
https://blog.csdn.net/baidu_30000217/article/details/51327289 前言:当我们想要实现几个小伙伴合作开发同一个项目,或者建立一个资源分享平台的 ...
- mybatis plus3.1.0 热加载mapper
今天又开始写业务代码了,每次修改SQL都要重启服务,实在是浪费时间. 想起之前研究过的<mybatis plus3.1.0 热加载mapper>,一直没有成功,今天静下心来分析了问题,终于 ...
- 在HTML中的下拉框中怎样实现超连接?
给你个例子自己改吧: <SELECT name="select" onchange="window.open(this.options[this.selectedI ...
- openmp的g++并行执行
#include <omp.h>#include <stdio.h>#include <stdlib.h>void Test(int n) { for(int ...
- 【16.50%】【CF 44G】Shooting Gallery
time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standa ...
- dotnet 使用 MessagePack 序列化对象
和很多序列化库一样,可以通过 MessagePack 序列化和反序列化,和 json 相比这个库提供了二进制的序列化,序列化之后的内容长度比 json 小很多 这个库能序列的内容不多,大多数时候建议使 ...
- FreeSql取多表数据
该篇内容由个人博客点击跳转同步更新!转载请注明出处! 以文章随笔与分类为例. 表结构 部分字段如下,其他省略,为了展示一对多关联,一个分类下可以有多个文章.一个文章属于一个分类. blog_artic ...