[英]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.