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