背景:一直想想把request的库的英文版翻译一下,更多是把一下自己不常用的方法巩固一下,最近不是特别忙就翻译的玩吧。其实网上有一篇写的特别详细的文章了,就当作自己消化理解。
直接从quickstart模块开始翻译吧
一。发送请求
首先要导入requests模块
>>> import requests
首先用get方法获取一个web页面,获取github的时间线。get方法为http协议最常用的方法,用于获取服务器资源。>>> r = requests.get('https://api.github.com/events')
通过requests.get()方法获取response的一个叫做r的实例,我们可以通过这个对象来获取我们想要的信息requests库的简单的api方法,可以很简单发送post请求:
>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
>>> print r.json()
{u'files': {}, u'origin': u'124.251.12.62', u'form': {u'key': u'value'}, u'url': u'http://httpbin.org/post', u'args': {}, u'headers': {u'Content-Length': u'9', u'Accept-Encoding': u'gzip, deflate', u'Host': u'httpbin.org', u'Accept': u'*/*', u'User-Agent': u'python-requests/2.13.0', u'Connection': u'close', u'Content-Type': u'application/x-www-form-urlencoded'}, u'json': None, u'data': u''}
这个简单post请求,除了域名:http://httpbin.org+接口名称post,还有参数data。通过json()方法,返回的response是一个字典类型
http的请求一共有5中类型,post,get,delete,head,option。
get:用于获取接口的内容。
post:把信息带给接口并把对应信息修改。
head:请求获取接口的响应的头部信息。
delete:删除对应传入信息。
option:获取服务器的性能。
备注:这里面我用过的就只有post和get方法
二.传入参数
在发送某种请求时,我们希望可以传入某些参数,我们可以使用params参数出入,数据类型是字典类型,比如如下:
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('http://httpbin.org/get', params=payload)
>>> print r.json()
可以通过r.url的属性查看整个url
>>> r.url
u'http://httpbin.org/get?key2=value2&key1=value1'
三.响应内容
通过.text属性我们可以查看response的返回文本信息
>>> r = requests.get('https://api.github.com/events')
>>> r.text
requests支持解码服务端返回的response,其中unicode类型是最常用的解码格式调用.encoding属性我们可以查看返回的格式
>>> r.encoding
'utf-8'
该返回的格式为utf-8格式当然也可以自定义解码格式例如:
>>> r.encoding = 'ISO-8859-1'
如果你想要改变编码格式,requests支持你使用r.encoding去设置新的编码格式,然后使用r.text去验证是否生效。一般情况下,你先使用r.context查看编码格式,然后通过r.encoding去设置新的编码,在时候用r.text去验证是否设置成功四.二进制响应内容(这个我没看懂,直接翻译的了一下,目前测试中没有用到了)
你也可以通过二进制格式返回response的body,而不是通过文本格式
"gzip"模块可以自动传输编码方式自动解码为你
五.json格式响应内容
你可以使用json格式去解码response,然后处理对应key和value(文档response.json()返回时一个列表数据类型,但我在做接口测试时候返回都是dict类型)
>>> r = requests.get('https://api.github.com/events')
>>> r.json()
返回的是一个list,太长了不写了,有兴趣自己试一下吧
如果json解码失败的时候,r.json()方法会抛出一个异常,例如:如果response没有内容抛出一个204,或者返回response的是一个无效json格式就会返回“Value Error:...”(这个我一般遇到就是接口返回一个页面)
六.原始的响应内容(没有用过,也不知道啥时候回用到。。。)
在个别的情况下,我们需要得到原始的响应内容,用到r.row这个属性,如果确定要这么做需要在需要请求的时候把参数stream=True设置,
正常get请求设置stram=True时:
>>> r = requests.get('https://api.github.com/events', stream=True)
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x1055bb990>
>>> r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
可以正常读出内容。如果不设置stram=True时:
>>> r = requests.get('https://api.github.com/events')
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x1055aff90>
>>> r.raw.read(10)
''
这种情况下就读出来下面的另起一篇吧,写不动了,去干的别的活了,文档看多了也真是扛不住。。。。。