python爬虫headers设置后无效的解决方法


Posted in Python onOctober 21, 2017

此次遇到的是一个函数使用不熟练造成的问题,但有了分析工具后可以很快定位到问题(此处推荐一个非常棒的抓包工具fiddler) 

正文如下:

在爬取某个app数据时(app上的数据都是由http请求的),用Fidder分析了请求信息,并把python的request header信息写在程序中进行请求数据

代码如下

import requests
url = 'http://xxx?startDate=2017-10-19&endDate=2017-10-19&pageIndex=1&limit=50&sort=datetime&order=desc'

headers={
 "Host":"xxx.com",
 "Connection": "keep-alive",
 "Accept": "application/json, text/javascript, */*; q=0.01",
 "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Safari/537.36",
 "X-Requested-With": "XMLHttpRequest",
 "Referer": "http://app.jg.eastmoney.com/html_Report/index.html",
 "Accept-Encoding": "gzip,deflate",
 "Accept-Language": "en-us,en",
 "Cookie":"xxx"
}
r = requests.get(url,headers)
print (r.text)

请求成功但是,返回的是

{"Id":"6202c187-2fad-46e8-b4c6-b72ac8de0142","ReturnMsg":"加载失败!"}

就是被发现不是正常请求被拦截了

然后我去Fidder中看刚才python发送请求的记录 #盖掉的两个部分分别是Host和URL

python爬虫headers设置后无效的解决方法

然后查看请求详细信息的时候,请求头并没有加载进去,User-Agent就写着python-requests !   #请求头里的UA信息是java,python程序,有点反爬虫意识的网站、app都会拦截掉

Header详细信息如下

GET http://xxx?istartDate=2017-10-19&endDate=2017-10-19&pageIndex=1&limit=50&sort=datetime&order=desc
&Host=xxx.com

&Connection=keep-alive

&Accept=application%2Fjson%2C+text%2Fjavascript%2C+%2A%2F%2A%3B+q%3D0.01

&User-Agent=Mozilla%2F5.0+%28Windows+NT+6.1%3B+WOW64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F29.0.1547.59+Safari%2F537.36

&X-Requested-With=XMLHttpRequest

&Referer=xxx

&Accept-Encoding=gzip%2Cdeflate

&Accept-Language=en-us%2Cen

&Cookie=xxx
HTTP/1.1


Host: xxx.com
User-Agent: python-requests/2.18.4
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive


HTTP/1.1 200 OK
Server: nginx/1.2.2
Date: Sat, 21 Oct 2017 06:07:21 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 75
Connection: keep-alive
Cache-Control: private
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET

一开始还没发现,等我把请求的URL信息全部读完,才发现程序把我的请求头信息当做参数放到了URL里

那就是我请求的时候request函数Header信息参数用错了

又重新看了一下Requests库的Headers参数使用方法,发现有一行代码写错了,在使用request.get()方法时要把参数 “headers =“写出来 

更改如下:

import requests
url = 'http://xxx?startDate=2017-10-19&endDate=2017-10-19&pageIndex=1&limit=50&sort=datetime&order=desc'

headers={
 "Host":"xxx.com",
 "Connection": "keep-alive",
 "Accept": "application/json, text/javascript, */*; q=0.01",
 "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Safari/537.36",
 "X-Requested-With": "XMLHttpRequest",
 "Referer": "http://app.jg.eastmoney.com/html_Report/index.html",
 "Accept-Encoding": "gzip,deflate",
 "Accept-Language": "en-us,en",
 "Cookie":"xxx"
}
r = requests.get(url,headers=headers)

然后去查看Fiddler中的请求。

python爬虫headers设置后无效的解决方法

此次python中的请求头已经正常了,请求详细信息如下

GET http://xxx?startDate=2017-10-19&endDate=2017-10-19&pageIndex=1&limit=50&sort=datetime&order=desc HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Safari/537.36
Accept-Encoding: gzip,deflate
Accept: application/json, text/javascript, */*; q=0.01
Connection: keep-alive
Host: xxx.com
X-Requested-With: XMLHttpRequest
Referer: http://xxx
Accept-Language: en-us,en
Cookie: xxx


HTTP/1.1 200 OK
Server: nginx/1.2.2
Date: Sat, 21 Oct 2017 06:42:21 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 75
Connection: keep-alive
Cache-Control: private
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET

然后又用python程序请求了一次,结果请求成功,返回的还是

{"Id":"6202c187-2fad-46e8-b4c6-b72ac8de0142","ReturnMsg":"加载失败!"}

因为一般cookie都会在短时间内过期,所以更新了cookie,然后请求成功

python爬虫headers设置后无效的解决方法

需要注意的是用程序爬虫一定要把Header设置好,这个app如果反爬的时候封ip的话可能就麻烦了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Linux下Python获取IP地址的代码
Nov 30 Python
图文详解WinPE下安装Python
May 17 Python
Python切换pip安装源的方法详解
Nov 18 Python
python中模块查找的原理与方法详解
Aug 11 Python
python中使用PIL制作并验证图片验证码
Mar 15 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
python3 unicode列表转换为中文的实例
Oct 26 Python
如何使用Python多线程测试并发漏洞
Dec 18 Python
Python列表操作方法详解
Feb 09 Python
Python基于locals返回作用域字典
Oct 17 Python
Python使用pyenv实现多环境管理
Feb 05 Python
Python 结巴分词实现关键词抽取分析
Oct 21 #Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 #Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 #Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 #Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 #Python
python虚拟环境virtualenv的使用教程
Oct 20 #Python
Python环境搭建之OpenCV的步骤方法
Oct 20 #Python
You might like
PHPShop存在多个安全漏洞
2006/10/09 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP 验证登陆类分享
2015/03/13 PHP
关于PHP开发的9条建议
2015/07/27 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
python实现得到一个给定类的虚函数
2014/09/28 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
单位委托书怎么写
2014/08/02 职场文书
迟到检讨书
2015/01/26 职场文书
初中思品教学反思
2016/02/20 职场文书
创业计划书之寿司
2019/07/19 职场文书
python接口测试返回数据为字典取值方式
2022/02/12 Python