我们知道,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模块内部已经自动为你做了这件事