我们知道,request 库的post请求方法即支持data 传参也支持json传参

import requests,json

url = 'http://httpbin.org/post'
data = {'some': 'data'}


r1 = requests.post(url, data=data)
r2 = requests.post(url,data=json.dumps(data))
r3 = requests.post(url,json=data)
r4 = requests.post(url=url,json=json.dumps(data))

# data 传入dict
# 查看输出 Content-Type:application/x-www-form-urlencoded
# 即键值对的形式:
# 类似some=data&xxx=xxx 的形式
print(r1.request.headers)
# data 传入str类型参数
# 查看输出 Content-Type没设置
print(r2.request.headers)

# json 传入dict和str类型参数
# request内置的json会将dict 转换成json字符串
# 查看输出Content-Type自动设置为application
print(r3.request.headers)
print(r4.request.headers)
# 获取请求参数
print(r3.request.body)
print(r4.request.body)

总结:

使用data传参时:

data传入 dict 时,请求头 默认设置为Content-Type:application/x-www-form-urlencoded

data 传入str 时,请求头不会默认设置任何 内容类型,如果想要使用data传参str类型的参数时

建议单独设置一个请求头并设置其内容类型为'Content-Type': 'application/json'

json 传参时,传参类型必须是str ,requests库 将会默认设置请求头的内容类型为'Content-Type': 'application/json'

但需要注意的是,参数类型为dict的情况下 是无需将dict 转换为str的,

因为在requests模块内部已经自动为你做了这件事

2560969-20220104225951871-1524315858.png

来源:https://www.cnblogs.com/byhh/p/15765000.html