簡體   English   中英

python請求包中data和json參數的區別

[英]Difference between data and json parameters in python requests package

python Requests包中的data和json參數有什么區別?

文檔中不清楚

這段代碼是否:

import requests
import json
d = {'a': 1}
response = requests.post(url, data=json.dumps(d))

請注意,我們在這里將dict轉換為 JSON ☝️!

做任何不同的事情:

import requests
import json
d = {'a': 1}
response = requests.post(url, json=d)

如果是這樣,是什么? 后者是否自動將標題中的content-type設置為application/json

為了回答我自己的問題,我上面的兩個示例似乎做了同樣的事情,並且使用json參數確實將標題中的content-type設置為application/json 在上面使用data參數的第一個示例中,標題中的content-type需要手動設置。

2020 年,我覺得requests 文檔更清楚地說明了區別,但我仍然創建了一個 PR 使其更清楚


PS 這不回答 OP 問題,但如果第一個代碼會有所不同:

import requests
import json
d = {'a': 1}
response = requests.post(url, data=d)

- 請注意,這里的dict d不會轉換為 JSON 字符串!

如果第二個代碼相同(復制它以保持完整性):

import requests
import json
d = {'a': 1}
response = requests.post(url, json=d)

……那么結果就會大不相同。

第一個代碼將生成一個內容類型設置為application/x-www-form-urlencoded的請求,並且數據采用這種格式,因此: "a=1"

第二個代碼將生成一個內容類型設置為application/json的請求,實際上是這種格式的數據,所以{"a": 1} - 一個 JSON 字符串。

這里僅從我的經驗談,但請注意,最好將json字段與 dict 一起使用,而不是將 dict 轉儲到data字段中。

再次,僅從經驗談起,我沒有研究代碼本身,但似乎 requests 庫做了一些比json.dumps更聰明的 json 序列化。 data字段中使用json.dumps時,我遇到了幾個實例,其中導致來自(FastAPI)服務器的“值不是有效的字典”錯誤響應。 改用json字段解決了這些問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM