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

然后查看请求详细信息的时候,请求头并没有加载进去,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中的请求头已经正常了,请求详细信息如下

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,然后请求成功

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

python爬虫headers设置后无效解决方案的更多相关文章

  1. Python爬虫之设置selenium webdriver等待

    Python爬虫之设置selenium webdriver等待 ajax技术出现使异步加载方式呈现数据的网站越来越多,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加 ...

  2. Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Eastmount PS:如有需要Python学习资料的小伙伴可以加 ...

  3. useJDBC4ColumnNameAndLabelSemantics设置后无效,怎么办?

    连接的是DB2数据库, 在查询语句中有SELECT COLUMNNAME AS ALIASNAME FROM TABLE这样的结构时, 会报如下错误: Caused by: com.ibm.db2.j ...

  4. mysql: expire_logs_days设置后无效问题

    Sina blog - MySQL的 expire_logs_days 和 PURGE MASTER LOGS 无效问题

  5. Eclipse Kelper 设置代理服务器无效解决方案

    Open Network Connection Settings. Select Active Provider to "Manual". Set HTTP/HTTPS proxy ...

  6. (转)Python爬虫--通用框架

    转自https://blog.csdn.net/m0_37903789/article/details/74935906 前言: 相信不少写过Python爬虫的小伙伴,都应该有和笔者一样的经历吧只要确 ...

  7. Python 爬虫的代理 IP 设置方法汇总

    本文转载自:Python 爬虫的代理 IP 设置方法汇总 https://www.makcyun.top/web_scraping_withpython15.html 需要学习的地方:如何在爬虫中使用 ...

  8. python爬虫模拟登录验证码解决方案

    [前言]几天研究验证码解决方案有三种吧.第一.手工输入,即保存图片后然后我们手工输入:第二.使用cookie,必须输入密码一次,获取cookie:第三.图像处理+深度学习方案,研究生也做相关课题,就用 ...

  9. Python爬虫学习:四、headers和data的获取

    之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.c ...

随机推荐

  1. JAVA枚举操作(获取值,转map集合)

    JAVA枚举相对来说比.NET的枚举功能强大,感觉就像是一种简化版的类对象,可以有构造方法,可以重载,可以继承接口等等,但不能继承类,JAVA枚举在实际开发中应用相当频繁,以下几个封装方法在实际开发中 ...

  2. 记录Centos7搭建ftp服务器以及遇到的各种坑

    前言 今天被经理要求搭建ftp服务器,然后就去网上搜索了一下教程.搭建成功后(遇到的坑不少)特此记录一下.因为是为了记录一下整个操作流程以防以后使用所以比较啰嗦. 目录 1.安装vsftpd 2.创建 ...

  3. 【Unity Shader】(十) ------ UV动画原理及简易实现

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...

  4. oracle数据库更改字符集

    在数据迁徙的时候需要使源和目标数据库的字符集.版本等信息统一…… 这里是对一个数据库的设置,需要在两边进行同样的操作. SYS@PROD1> select userenv('language') ...

  5. MySQL(MariaDB)基础之一:编译安装

    一.cmake介绍 cmake的重要特性之一是其独立于源码的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译影响,因此在同一个源码树上可以进行多次不同 ...

  6. HackRF 升级固件到新版本

    本文内容.开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称:开源SDR实验室 HackRF链接:https://item.taobao.com/item.htm?spm=a1z10.1- ...

  7. 高可用OpenStack(Queen版)集群-3.高可用配置(pacemaker&haproxy)

    参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...

  8. Vue02

    3.Vue对象提供的属性功能 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 定义过滤器的方式有两种. 1 使用Vue.filter()进行全局定义 V ...

  9. CUDA、CUDNN在Mac Book Pro上安装的问题

    由于原版MacOS自带Nvidia驱动版本过低,导致最新版本CUDA安装后无法运行.具体症状为:在编译时一切正常,在运行CUDA相关程序时报错: CUDA driver version is insu ...

  10. (转)Django 数据库

         转:https://blog.csdn.net/ayhan_huang/article/details/77575186      目录 数据库说明 配置数据库 在屏幕输出orm操作对应的s ...