接口测试 request 的 post 请求中 json 和 data 区别

ZhouTing · 2019年07月31日 · 2095 次阅读

post 请求中 json 和 data

post 请求中,可以使用 data 传递参数,也可以使用 json 传递参数,那么这两种方式有什么区别呢?

image.png


如果参数为 JSON 数据,可以直接传入 json 参数,它将自动编码并将 Content-Type 的置为 application/json

payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.post("https://httpbin.org/post", json=payload)
print(r.text)

如果 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)

如果 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)

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册