通用httpclient生成方式
在做爬虫的时候,如何生成一个靠谱可用的httpclient对象是非常关键的。在踩了无数的坑之后,总结出一个较为完善的httpclient生成方式下载。
可以解决以下问题:
1、设置代理问题
2、设置默认的cookiestore对象,用来保存请求中的cookie。以便进行深层次访问。
3、在请求失败的重试策略问题
4、默认useragent的问题
5、https及自签名证书的验证问题
Java代码
/**
* 新建一个通用httpclientbuider
* 使用代理时,必须一起传入host对象。
* 不传入host对象的时候,代理不会生效
*/
public static HttpClientBuilder getInstanceClientBuilder(boolean isNeedProxy, CookieStore store, HttpHost host, HttpRequestRetryHandler handler, String userAgent) {
org.apache.http.ssl.SSLContextBuilder context_b = SSLContextBuilder.create();
SSLContext ssl_context = null;
try {
context_b.loadTrustMaterial(null, (x509Certificates, s) -> true);
//信任所有证书,解决https证书问题
ssl_context = context_b.build();
} catch (Exception e) {
e.printStackTrace();
}
ConnectionSocketFactory sslSocketFactory = null;
Registry<ConnectionSocketFactory> registry = null;
if (ssl_context != null) {
sslSocketFactory = new SSLConnectionSocketFactory(ssl_context, new String[]{"TLSv1", "TLSv1.1", "TLSv1.2"}, null, (s, sslSession) -> true);
//应用多种tls协议,解决偶尔握手中断问题
registry = RegistryBuilder.<ConnectionSocketFactory>create().register("https", sslSocketFactory).register("http", new PlainConnectionSocketFactory()).build();
} 下载
PoolingHttpClientConnectionManager manager = null;
if (registry != null) {
manager = new PoolingHttpClientConnectionManager(registry);
} else {
manager = new PoolingHttpClientConnectionManager();
}
manager.setMaxTotal(150);
manager.setDefaultMaxPerRoute(200);
HttpClientBuilder builder = HttpClients.custom().setRetryHandler(handler)
.setConnectionTimeToLive(6000, TimeUnit.SECONDS)
.setUserAgent(userAgent);
if (store != null) {
builder.setDefaultCookieStore(store);
}
if (isNeedProxy && host != null) {
// HttpHost proxy = new HttpHost("127.0.0.1", 1080);// 代理ip
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(host);
builder = builder.setRoutePlanner(routePlanner);
}
builder.setConnectionManager(manager);//httpclient连接池
builder.setRedirectStrategy(new AllowAllRedirectStrategy());//默认重定向所有302和307,否则httpclient只自动处理get请求导致的302和307
return builder;
}
转载于:https://blog.51cto.com/12477787/1887845
通用httpclient生成方式相关推荐
- java 下载图片流_java下载图片(通用)httpClient,io流
httpClient下载图片 public static void downImage(CloseableHttpClient client, String imgUrl, String savePa ...
- Android使用Google SMSRetrieverAPI监听短信
写在开头 google官方介绍 如果在没有读写短信权限的情况下获取用户的短信验证码呢?google为我们提供了SMSRetrieverAPI这个Api.解决了我们在用户收到短信后自动回填界面的需求.但 ...
- 消息幂等(去重)通用解决方案,真顶!
以下文章来源方志朋的博客,回复"666"获面试宝典 消息中间件是分布式系统常用的组件,无论是异步化.解耦.削峰等都有广泛的应用价值.我们通常会认为,消息中间件是一个可靠的组件--这 ...
- Http持久连接与HttpClient连接池
以下文章来源方志朋的博客,回复"666"获面试宝典 一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp so ...
- HttpClient+Jericho HTML Parser 实现网页的抓取
//转自:chenqi19831112/archive/2008/11/07/3248863.aspx Jericho HTML Parser是一个简单而功能强大的Java HTML解析器库,可以分析 ...
- 广州图书馆借阅抓取——httpClient的使用
欢迎访问我的个人网站,要是能在GitHub上对网站源码给个star就更好了. 搭建自己的网站的时候,想把自己读过借过的书都想记录一下,大学也做过自己学校的借书记录的爬取,但是数据库删掉了==,只保留一 ...
- java 实现HTTP连接(HTTPClient)
在实习中,使用到了http连接,一直理解的很模糊,特地写个分析整理篇.分析不到位的地方请多多指教. Http 目前通用版本为 http 1.1 . Http连接大致分为2种常用的请求--GET,POS ...
- HttpClient 设置不当引发的一次雪崩!
作者 | zxcodestudy 来源 | https://blog.csdn.net/qq_16681169/article/details/94592472 一. 事件背景 我最近运维了一个网上的 ...
- 《Effective Java》第8章 通用程序设计
第47条:了解和使用类库 Top 100 Java Libraries on Github 2016 Library Number of Projects Type % of projects jun ...
最新文章
- Xamarin开发Anroid应用介绍
- Java培训找什么样的机构比较好
- python内置函数中的 IO文件系列 open和os
- springboot+mybatis调用oracle存储过程
- python程序后台运行的实现
- 【数据中台】你的企业是否需要建设数据中台?
- TinyXml帮助文档
- opencv计算机视觉编程攻略 第2版,OpenCV计算机视觉编程攻略(第2版)pdf
- 王者归来!华为P40 Pro渲染图曝光:后置矩阵徕卡五摄模组
- Windows Store 开发总结——文件操作
- 计算机常用汉字输入法的使用,计算机的基本操作汉字输入法--.ppt
- vue(vue-cli+vue-router)+babel+webpack项目搭建入门 (第一步)
- 网页爬虫实例一(网页截屏)
- 聚类分析原理(动图演示)
- (转)以太坊(Ethereum)全零地址(0x000000...)揭秘
- 前端面试,面试官会问些啥...
- WINRAR密码去除/破解工具
- 代码覆盖率和功能覆盖率
- 自动驾驶的分级,感知与规划基本意义
- 如何制作360度vr全景?制作360度全景效果图有哪些技巧?
热门文章
- 不同品牌android手机ui,各大安卓手机品牌里,系统UI设计对比,谁赢了?
- python 为什么用%格式化_Python中应该使用%还是format来格式化字符串?
- Verilog设计实例(4)详解全类别加法器(一)
- 【 Vivado 】UCF到XDC之间的转换
- Python入门篇-数据结构堆排序Heap Sort
- leetcode 二分查找 Search in Rotated Sorted ArrayII
- Linux 创建、删除、修改 文件夹 文件命令(笔记)
- 剑走偏锋——用css制作一个三角形箭头
- beats 耳机 android,Beats耳机app
- linux摄像头 sdl,Linux音视频(SDL与YUV)