作者:好咯午睡了_740 | 来源:互联网 | 2023-05-19 18:37
HttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。
以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。
(1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
(2)支持自动转向
(3)支持 HTTPS 协议
(4)支持代理服务器等
该篇主要是讲如何模拟主流浏览器进行访问。httpclient更新到4.0以上版本时有了很多改变,方法和类都变了,基本上等于重做的项目,我这里只针对4.0以上版本。
首先我先讲讲为什么要模拟浏览器,如果不模拟浏览器则HttpPost和HttpGet中的headers为空,不像其他浏览器那么有headers如图(谷歌浏览器在访问百度时的header):
所以在一些后台比较严格的网站时(检查headers)会返回502或者验证不通过等情况,所以不能达到我们想要的结果。
模拟浏览器主要就是模拟主流浏览器的headers,但保险起见的话先用谷歌浏览器开隐身窗口进入调试模式再访问你想访问的网站,把对应的浏览器header取过来设置到对应的HttpGet和HttpPost的headers里就可以了。
例如我访问csdn博客就是用下面的设置方式:
post.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
post.setHeader("Accept-Encoding","gzip,deflate,sdch");
post.setHeader("Accept-Language","zh-CN,zh;q=0.8");
post.setHeader("Connection","keep-alive");
post.setHeader("Host", "blog.csdn.net");
post.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36");
完全从谷歌浏览器上面抄过来的,模拟浏览器访问就不会出现502。