1. 程式人生 > 其它 >python中requests.post方法中的data和json的區別

python中requests.post方法中的data和json的區別

技術標籤:python學習筆記python自動化測試

在通過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 轉碼。