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]})
posted @ 2022-07-29 10:19  keena_jiao  阅读(267)  评论(0编辑  收藏  举报