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 为str  r.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的主要内容,如果未能解决你的问题,请参考以下文章

python接口自动化测试-requests.get()

python接口自动化测试-requests.get()

Requests.get(zipfile) 获取“BadZipFile:文件不是 zip 文件”

python requests第三方库详解

python 爬虫 基于requests模块的get请求

爬虫初探之requests