如何逼真的模拟浏览器发送请求?

请求头:

Host: pubs.rsc.org
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.baidu.com/s?wd=rsc&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=monline_5_dg
Cookie: ShowEUCookieLawBanner=true; __utma=245083418.574632152.1421932930.1425088577.1425088577.1; __utmz=245083418.1425088577.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); OAX=cFSCsVTA+KgABIGI; ki_t=1421932573619%3B1425001916480%3B1425039683552%3B11%3B64; ki_r=; _ga=GA1.2.574632152.1421932930; __atuvc=2%7C4%2C1%7C5%2C8%7C6%2C0%7C7%2C10%7C8; X-Mapping-hhmaobcf=3D85FAB7A4929E1DC99D1C005DA6212A; ASP.NET_SessionId=e2rq4u5ezbhocigv02b1mpjn
Connection: keep-alive
这里面有几个必须带的?
除了这些,还有哪些注意的?

......................补充..........................
功能:用scrapy去爬数据

阅读 26.4k
9 个回答

用个phantomjs老老实实模拟操作 如果你不想去算各种防机器人的参数。。phantomjs本身就是无界面浏览器

Host必须有。
一般网站不会检查User-Agent,但以防万一还是把User-Agent设置成一些主流的浏览器的UA。尤其是那些手机站,模拟手机带个苹果的safari UA就好了。这些东西百度一下就能找到,或者是Chrome的手机模拟器也有。
Accept、Accept-Language、Accept-Encoding这三个一般不检查,尤其是Accept-Encoding,只是一个是否支持gzip传输的协议头
Referer大部分网站会检查,一般只要设置成你抓包时候得到的Referer就好了(或者是同域名的)
Cookie一般都要,尤其是ASPX-C#,那个ASP.NET_SessionId记得提前获取。这些东西是用来记录你的“登录状态”的。那些 “__”开头的就不需要了,一般是谷歌、百度统计什么的。
Connection一般不检查。也试过检查的,最好带上。
其它协议头都建议带上,尤其是那些来路不明的,一定要知道它是怎么来的(例如跟csrf有关的协议头)然后都给带上

紧紧是模拟,不涉及程序自动跑的话,用fiddle抓一下,然后修改为你项要的参数模拟发就OK了。

模拟就按照抓取的参数设置就行了,其实大部分时候是因为请求频率问题才被发现.

chrome的开发者工具上,右键任意请求会有一个“Copy as cURL”,可以复制出chrome发起的http请求,包含所有header,希望可以帮到你。

当然是全带最逼真…

问题里面贴的这些里面Host通常是必须的,Referer和UA是经常影响逻辑比较重要的,Cookies是带状态(比如用户登录)所必须也相对最复杂的

采用phantomjs或者selenium等

把抓到的头都带上

新手上路,请多包涵

用google插件postman或者自己去找apache的httpclient包

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进