前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Requests库(二)

Requests库(二)

作者头像
雷子
发布2021-03-15 12:47:43
3260
发布2021-03-15 12:47:43
举报
文章被收录于专栏:雷子说测试开发

JSON 响应内容

Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据,我们可以如下做。

代码语言:javascript
复制
import requestsr = requests.get('https://api.github.com/events')print(r.json())

展示如下

如果 JSON 解码失败, r.json() 就会抛出一个异常。

我们在实际的使用中要处理这些异常,增加

代码语言:javascript
复制
try:
    pass
except:
    pass

我们的请求可以用上面的类似的去包括。那么是不是我们返回json 就正确呢,其实不是,有时候我们需要处理内部的数据,因为接口返回的不一定返回如上面的数据,我们需要根据我们的情况进行处理。比如可能会返回,这样虽然返回的是json,但是不一定是我们想要的数据。

代码语言:javascript
复制
{'message': 'Not Found', 'documentation_url': 'https://docs.github.com/rest'}

在实际的测试中,我们一定要进行处理。我们需要反复的去研究如何处理里面的数据,才能掌握里面的,正常的返回的数据也是需要我们的按照一定的规则去处理的。另外呢,在打印结果之前呢,我们可以打印下接口返回状态码。r.status_code 。常用的 http状态码 有

200,403,501,502,503,404等。

原始响应内容

在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。具体你可以这么做:

代码语言:javascript
复制
>>> 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'

但一般情况下,你应该以下面的模式将文本流保存到文件:

代码语言:javascript
复制
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获取。具体如下。

这样我们就可以去从这里面拿到请求头,但是很多的数据可能是网站随机变动的,所以呢,我们在请求的时候,一定要尝试着去这请求头。

代码语言:javascript
复制
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如下:

代码语言:javascript
复制
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)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 我们在实际的使用中要处理这些异常,增加
  • 我们的请求可以用上面的类似的去包括。那么是不是我们返回json 就正确呢,其实不是,有时候我们需要处理内部的数据,因为接口返回的不一定返回如上面的数据,我们需要根据我们的情况进行处理。比如可能会返回,这样虽然返回的是json,但是不一定是我们想要的数据。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档