背景:

  我们有个车管系统,需要定期的去查询车辆的违章,之前一直是调第三方接口去查,后面发现数据不准确(和深圳交警查的对不上),问题比较多。于是想干脆直接从深圳交警上查,那不就不会出问题了吗,但是问题又来了,因为车比较多,一次查的数据量很大,如果同时间段大批量请求深圳交警可能会导致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的更多相关文章

  1. 解决httpclient设置代理ip之后请求无响应的问题

    httpclient这个工具类对于大家来说应该都不陌生吧,最近在使用过程中出现了碰到一个棘手的问题,当请求的接口地址由http变成https之后,程序执行到 httpClient.execute(ht ...

  2. HttpClient使用代理IP

    在爬取网页的时候,有的网站会有反爬虫措施,导致服务器请求拒接,可以使用代理IP来访问,解决请求拒绝的问题 代理IP分 透明代理.匿名代理.混淆代理.高匿代理 1.透明代理(Transparent Pr ...

  3. (四)HttpClient 使用代理 IP

    第一节: HttpClient 使用代理 IP 在爬取网页的时候,有的目标站点有反爬虫机制,对于频繁访问站点以及规则性访问站点的行为,会采集屏蔽IP措施. 这时候,代理IP就派上用场了. 关于代理IP ...

  4. 爬虫-设置代理ip

    1.为什么要设置代理ip 在学习Python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败.高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网 ...

  5. Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP

    自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...

  6. Python爬虫常用小技巧之设置代理IP

    设置代理IP的原因 我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站.假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问.所以你可以设置一些代理服务器来 ...

  7. python3 selenium模块Chrome设置代理ip的实现

    python3 selenium模块Chrome设置代理ip的实现 selenium模块Chrome设置代理ip的实现代码: from selenium import webdriver chrome ...

  8. scrapy框架设置代理ip,headers头和cookies

    [设置代理ip] 根据最新的scrapy官方文档,scrapy爬虫框架的代理配置有以下两种方法: 一.使用中间件DownloaderMiddleware进行配置使用Scrapy默认方法scrapy s ...

  9. HttpClient 设置代理方式

    HttpClient httpClient = new HttpClient(); //设置代理服务器的ip地址和端口 httpClient.getHostConfiguration().setPro ...

随机推荐

  1. js毫秒数转天时分秒

    formatDuring: function(mss) {   var days = parseInt(mss / (1000 * 60 * 60 * 24));   var hours = pars ...

  2. redux【react】

    首先介绍一下redux就是Flux的一种进阶实现.它是一个应用数据流框架,主要作用应用状态的管理 一.设计思想: (1).web应用就是一个状态机,视图和状态一一对应 (2).所有的状态保存在一个对象 ...

  3. Ubuntu16.04.3深度学习环境搭建

    依赖 pip3 install pillow 安装numpy相关sudo apt-get install python-numpy python-scipy python-matplotlib ipy ...

  4. 搭建服务器上的GIT并实现自动同步到站点目录(www)

    https://blog.csdn.net/baidu_30000217/article/details/51327289 前言:当我们想要实现几个小伙伴合作开发同一个项目,或者建立一个资源分享平台的 ...

  5. mybatis plus3.1.0 热加载mapper

    今天又开始写业务代码了,每次修改SQL都要重启服务,实在是浪费时间. 想起之前研究过的<mybatis plus3.1.0 热加载mapper>,一直没有成功,今天静下心来分析了问题,终于 ...

  6. 在HTML中的下拉框中怎样实现超连接?

    给你个例子自己改吧: <SELECT name="select" onchange="window.open(this.options[this.selectedI ...

  7. openmp的g++并行执行

    #include <omp.h>#include <stdio.h>#include <stdlib.h>void Test(int n) {    for(int ...

  8. 【16.50%】【CF 44G】Shooting Gallery

    time limit per test 5 seconds memory limit per test 256 megabytes input standard input output standa ...

  9. dotnet 使用 MessagePack 序列化对象

    和很多序列化库一样,可以通过 MessagePack 序列化和反序列化,和 json 相比这个库提供了二进制的序列化,序列化之后的内容长度比 json 小很多 这个库能序列的内容不多,大多数时候建议使 ...

  10. FreeSql取多表数据

    该篇内容由个人博客点击跳转同步更新!转载请注明出处! 以文章随笔与分类为例. 表结构 部分字段如下,其他省略,为了展示一对多关联,一个分类下可以有多个文章.一个文章属于一个分类. blog_artic ...