requests.get方法中的header
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests.get方法中的header相关的知识,希望对你有一定的参考价值。
参考技术A 遇到的问题 :
使用requests.get方法抓取接口数据的时候,发现返回的内容中没有data部分的内容,之返回了如下:
"result_code":0,"message":"SUCCESS"
解决办法 :
后来在get方法中加入了headers参数,headers参数如下:
结果 :返回的参数包含了data内容
总结 :
参考文章: https://www.jianshu.com/p/c5cf6a1967d1
查看请求信息,发现我们一般写的爬虫会默认告诉服务器自己发送了一个Python爬取请求,而一般网站是不允许被爬虫访问的,估计是因为会涉及到商业问题。最后,通过更改User-Agent字段就可以轻易骗过该网站。
那么User-Agent到底是什么呢?
User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。
又该如何使用呢?
最简单的方法就是按照下面步骤进行
详细版解释: 谈谈 UserAgent 字符串的规律和伪造方法
简要版解释:
我用的Chrome浏览器,查看User-Agent的结果:
User-Agent通常格式:
由于历史上的浏览器大战,当时想获得图文并茂的网页,就必须宣称自己是 Mozilla 浏览器。此事导致如今User-Agent里通常都带有Mozilla字样,出于对历史的尊重,大家都会默认填写该部分。
Windows NT 10.0是指我使用的操作系统的版本,比如我使用的win10对应的就是Windows NT 10.0,如果我使用win7对应的就是Windows NT 6.1。
Win64; x64是指我的操作系统是64位的
Windows系统下:
Linux系统下:
macOS系统下:
AppleWebKit/537.36 (Khtml, like Gecko)...Safari/537.36,历史上,苹果依靠了WebKit内核开发出Safari浏览器,WebKit包含了WebCore引擎,而WebCore又从KHTML衍生而来。由于历史原因,KHTML引擎需要声明自己是“类似Gecko”的,因此引擎部分这么写。再后来,Google开发Chrome也是用了WebKit内核,于是也跟着这么写。借用Littern的一句话:“Chrome 希望能得到为Safari编写的网页,于是决定装成Safari,Safari使用了WebKit渲染引擎,而WebKit呢又伪装自己是KHTML,KHTML呢又是伪装成Gecko的。同时所有的浏览器又都宣称自己是Mozilla。”。不过,后来Chrome 28某个版本改用了blink内核,但还是保留了这些字符串。而且,最近的几十个版本中,这部分已经固定,没再变过
本人用的是Chrome浏览器,其中60.0 是大版本,3100是持续增大的一个数字,而0则是修补漏洞的小版本。
关于Firefox与IE/Edge的讲解: 谈谈 UserAgent 字符串的规律和伪造方法
最后,居然有大佬封装了不同操作系统不同浏览器的User-Agent: User-Agent封装使用教程
Requests杂谈
请求 1 get请求 r = requests.get(‘https://api.github.com/events‘) r = requests.get(url, headers=headers)
2 post请求 r = requests.post(‘http://httpbin.org/post‘, data = {‘key‘:‘value‘})
3传参 >>> payload = {‘key1‘: ‘value1‘, ‘key2‘: ‘value2‘}
>>> r = requests.get("http://httpbin.org/get", params=payload)
响应 1 r.text 为strr.content二进制响应
为bite,用r.content.decode()编码 r.raw 为原始响应内容
Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:如果 JSON 解码失败,r.json()
就会抛出一个异常。例如,响应内容是 401 (Unauthorized),尝试访问r.json()
将会抛出ValueError: No JSON object could be decoded
异常
通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:
以上是关于requests.get方法中的header的主要内容,如果未能解决你的问题,请参考以下文章