Requests 请求和响应
一、POST方法
1、json和dict
python中的dict类型要转换为json格式的数据需要用到json库:
import json
<string> = json.dumps(<dict>)<dict> = json.loads(<json>)2、requests.post()中data和json参数区别
1、如果参数为JSON数据,可以直接传入json参数,它将自动编码并将Content-Type的置为application/json
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("https://httpbin.org/post", json=payload)print(r.text)2、如果data传递的参数为字符串,例如【json.dumps(payload)】,则request对参数进行url编码,Content-Type的值为None,所以data传字符串时,一定要在header中指定Content-Type
payload = {'key1': 'value1', 'key2': 'value2'}
headers={"Content-Type": "application/json"}r = requests.post("https://httpbin.org/post", headers=headers,data=json.dumps(payload))print(r.text)3、如果data传递的是字典、元组组成的列表或列表作为值的字典,则request对参数进行url编码,Content-Type的值为application/x-www-form-urlencoded
# 字典
payload1 = {'key1': 'value1', 'key2': 'value2'} r = requests.post("https://httpbin.org/post", data=payload1)# 元组组成的列表payload2 = [('key1', 'value1'), ('key1', 'value2')] r = requests.post("https://httpbin.org/post", data=payload2)# 列表作为值的字典payload3 = {'key1': ['value1', 'value2']} r = requests.post("https://httpbin.org/post", data=payload3)二、GET方法
requests.get(url, params = None, **kwargs)
url: 拟获取页面的url链接
params: url中额外参数,字典或字节流格式,可选
三、Response 常见操作
1、response.json()【Requests中内置的JSON解码器】
相当于将接口返回的json字符串格式的响应体通过python的反序列化转为python字典格式
2、response.ok
如果status_code小于200,response.ok返回True。
如果status_code大于200,response.ok返回False。
3、response.request.headers
response.request.headers 返回此响应的请求对象中的请求头数据字典。【该字典的字典键不区分大小写,若键不存在则返回None】
4、response.request.hooks
requests提供了hook机制,让我们能够在请求得到响应之后去做一些自定义的操作;比如打印某些信息、修改响应内容等。


解释:
在上述例子中:
①定义了两个钩子函数,分别用来打印response对象中的url(print_url)和修改response对象中的url(change_url)。
②通过参数 hooks=dict(response=[print_url, change_url])调用。其中response是钩子的类型
③从运行结果中,可以看出钩子函数1(print_url)和钩子函数2(change_url)被顺序执行了,且达到了篡改响应结果的目的。
④在上述例子中,只在requests方法级别调用了一次hook,如果想要每个请求都使用hook呢?可以在requests的session对象中添加hook来让该session对象发出去的请求均带有hook,例如:
s = requests.Session()
s.hooks.update({"response": [print_url, change_url]})

浙公网安备 33010602011771号