[英]Python requests library: use of json.dumps
潛在的新手問題,但長期以來一直困擾着我。
在很多 Python 教程中,我看到了非常相似的片段,用於將某些內容發布到 REST API
import json
import requests
url = 'https://api.blabla.com/v1'
token = '1234'
headers = {
'Authorization: f'Bearer {token}',
'Content-Type: 'application/json'
}
body = {
'name': 'Test name'
}
my_response = requests.post(url, headers=headers, data=json.dumps(body)).json()
print(my_response)
請求文檔說數據對象應該接收一個字典。 在上面,主體已經是一個字典,那么為什么需要使用json.dump
因為這基本上使它成為一個字符串(而文檔說它應該是一個字典)。
那么為什么不應該是:
my_response = requests.post(url, headers=headers, data=body).json()
另一方面,官方請求文檔還說我們可以傳遞 json 參數,在這個例子中它會是(如果我們遵循文檔):
my_response = requests.post(url, headers=headers, json=body).json()
但是 JSON 參數應該是一個 JSON 對象,所以如果我們這樣傳遞正文,這意味着我們將一個 dict 對象傳遞給 JSON 參數,這不是文檔所說的。
筆記:
data
- 附加到請求的正文。 如果提供了字典或元組列表[(key, value)]
,則將進行表單編碼。https://requests.readthedocs.io/en/master/api/#requests.Request
(強調我的)
如果您將 dict 作為data
傳遞,它將是form-encoded 。 如果您將 dict 作為json
傳遞,它將被 JSON 序列化。 json
參數只是data=json.dumps(body)
的便捷簡寫。 為什么許多人使用后者而不是前者……誰知道呢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.