JSON 响应内容
Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据,我们可以如下做。
import requestsr = requests.get('https://api.github.com/events')print(r.json())
展示如下
如果 JSON 解码失败, r.json() 就会抛出一个异常。
try:
pass
except:
pass
{'message': 'Not Found', 'documentation_url': 'https://docs.github.com/rest'}
在实际的测试中,我们一定要进行处理。我们需要反复的去研究如何处理里面的数据,才能掌握里面的,正常的返回的数据也是需要我们的按照一定的规则去处理的。另外呢,在打印结果之前呢,我们可以打印下接口返回状态码。r.status_code 。常用的 http状态码 有
200,403,501,502,503,404等。
原始响应内容
在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。具体你可以这么做:
>>> r = requests.get('https://api.github.com/events', stream=True)>>> r.raw<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>>>> r.raw.read(10)'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
但一般情况下,你应该以下面的模式将文本流保存到文件:
with open(filename, 'wb') as fd: for chunk in r.iter_content(chunk_size): fd.write(chunk)
使用 Response.iter_content 将会处理大量你直接使用 Response.raw 不得不处理的。当流下载时,上面是优先推荐的获取内容方式。Note that chunk_size can be freely adjusted to a number that may better fit your use cases. 这个一般情况下很少使用,我们可以不用做更多的了解。
定制请求头
为什么要定制我们的请求头呢,因为在我们真实的请求中,很多网站,或者测试的接口,我们需要在请求头添加一些数据。那么headers如何处理呢,正常的如何获取呢。
1.从web请求获取
2.从接口文档
3.抓包。
headers都是字典格式的,我们可以从组合成key-value格式去组合。最近我在做七麦数据的数据,因为数据大,需要接口请求做处理。但是在请求的时候发现请求不了数据。所以呢,我需要对请求头做下处理。
我的获取方式就是从web端用F12获取。具体如下。
这样我们就可以去从这里面拿到请求头,但是很多的数据可能是网站随机变动的,所以呢,我们在请求的时候,一定要尝试着去这请求头。
Accept: */*Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Connection: keep-aliveUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36
这里是我一般情况下去加的,当然根据不同的网站,我们在请求的时候 需要根据我们的实际情况去调整。
简单的增加headers增加的demo如下:
import requestsheaders={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36'
}r=requests.get("https://api.github.com/eventsdd",headers=headers)