在通过requests.post()进行POST请求时,传入参数有两个,一个是data,一个是json。那么如何区分他们呢
一,请求头的数据格式为Content-Type=application/json
如果请求头的数据格式为Content-Type=application/json
,表明我们要传入的参数是序列化后的 JSON 字符串。然而在python中,我们的参数往往写成以下格式:
data = {
"loginType": 0,
"password": "c9e672bfee5ab65ee471e1e0547e01a7",
"playerAccount": "15872285573",
"deviceCode": "00-E1-8C-B8-14-4C",
"deviceSoftVersion": "V1.0.0",
"platform": 4,
"platformModel": "1.0",
"timestamp": 1606273340134
}
data就是我们要传的参数,python中是以字典的形式存在的,数据类型就是字典,但是传入的数据要求是json格式的字符串,因此传入的时候需要转换。
1. 通过json.dumps将data数据转化成json格式
将我们传入的data参数通过json.dumps转换后就变成了json格式的字符串,如下:
import json
data = {
"loginType": 0,
"password": "c9e672bfee5ab65ee471e1e0547e01a7",
"playerAccount": "15872285573",
"deviceCode": "00-E1-8C-B8-14-4C",
"deviceSoftVersion": "V1.0.0",
"platform": 4,
"platformModel": "1.0",
"timestamp": 1606273340134
}
data_json=json.dumps(data)
print(data_json)
print(type(data_json))
打印出来的结果为:
格式为json格式,类型为字符串,此时刚好满足application/json的含义,传入的参数就可以用data传参,但是此时必须传入headers=sapplication/json;charset=UTF-8
,因为headers请求头表明传入的是序列化的json格式,刚好和转化后的data对应
import requests,json
def login():
'''通过登录拿到返回的token'''
url = 'http://10.9.0.128:9999/user/un/login'
data = {
"loginType": 0,
"password": "c9e672bfee5ab65ee471e1e0547e01a7",
"playerAccount": "15872285573",
"deviceCode": "00-E1-8C-B8-14-4C",
"deviceSoftVersion": "V1.0.0",
"platform": 4,
"platformModel": "1.0",
"timestamp": 1606273340134
}
data_json=json.dumps(data)
re = requests.post(url=url, data=data_json,headers={
"Content-Type":"application/json;charset=UTF-8"
})
2. data数据不做转换处理
在data数据不做处理的时候,post请求头必须用json参数,请求头headers是否传headers="Content-Type":"application/json;charset=UTF-8"
,都不影响
import requests,json
def login():
'''通过登录拿到返回的token'''
url = 'http://10.9.0.128:9999/user/un/login'
data = {
"loginType": 0,
"password": "c9e672bfee5ab65ee471e1e0547e01a7",
"playerAccount": "15872285573",
"deviceCode": "00-E1-8C-B8-14-4C",
"deviceSoftVersion": "V1.0.0",
"platform": 4,
"platformModel": "1.0",
"timestamp": 1606273340134
}
re = requests.post(url=url, json=data)
print(type(data))
return re.text
二、请求头的数据格式为application/x-www-form-urlencoded
当请求数据格式为表单的时候,我们的请求数据只能为字典,不能进行转换,传输的格式转换为键值对并按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。