python中requests.post方法中的data和json的區別
阿新 • • 發佈:2021-02-11
在通過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 轉碼。