Python requests.post()方法中data和json參數(shù)的使用方法
json和dict
python中的dict類型要轉(zhuǎn)換為json格式的數(shù)據(jù)需要用到j(luò)son庫:
import json <json> = json.dumps(<dict>) <dict> = json.loads(<json>)
需要注意的是:
python中并沒有json類型這一說法,通過json.dumps(<dict>)轉(zhuǎn)換的字典對象,最后得到的是一個字符串對象,在python中json格式的數(shù)據(jù)實際上就是一個字符串。
>>> j = json.dumps(<dict>) >>> type(j) <class 'str'>
雖說json格式的數(shù)據(jù)在python中是以字符串的類型存在的,但是通過str(<dict>)工廠函數(shù)所得到的結(jié)果同json.dumps(<dict>)方法所得到的結(jié)果是不相同的
>>> d = {'a': 1, 'b': 2} >>> d_d = {"a": 1, "b": 2} >>> string = str(d) >>> string_d = str(d_d) >>> js = json.dumps(d) >>> js_d = json.dumps(d_d) >>> string == string_d True >>> js = js_d True >>> string == js False >>> string "{'a': 1, 'b': 2}" >>> js '{"a": 1, "b": 2}'
可以看出string和js的區(qū)別在于引號
對于可以作為json.loads(<str>)參數(shù)對象的字符串,除了要滿足字典類型的格式外,所有的字符串對象必須是雙引號。
requests.post()
在通過requests.post()進(jìn)行POST請求時,傳入報文的參數(shù)有兩個,一個是data,一個是json
常見的form表單可以直接使用data參數(shù)進(jìn)行報文提交,而data的對象則是python中的字典類型;
在爬蟲的過程中遇到了一種payload報文,是一種json格式的報文,因此傳入的報文對象也應(yīng)該是格式的;
這里有兩種方法進(jìn)行報文提交:
import requests import json url = "http://example.com" data = { 'a': 1, 'b': 2, } # 1 requests.post(url, data=json.dumps(data)) # 2-json參數(shù)會自動將字典類型的對象轉(zhuǎn)換為json格式 requests.post(url, json=data)
其它:
在requests.get()方法,中可以使用params參數(shù)來構(gòu)建url
請求得到的結(jié)果可能呈現(xiàn)亂碼的狀態(tài),可以通過resp.encoding屬性查看網(wǎng)頁編碼方式,同時可以在獲取resp.text之前對resp.encoding='utf-8'賦值,這樣再次獲取的resp.text則會使用我們要求的編碼方式。
post請求中json和data的區(qū)別
post請求中,可以使用data傳遞參數(shù),也可以使用json傳遞參數(shù)
兩種方式有什么區(qū)別?
如果參數(shù)為JSON數(shù)據(jù),可以直接傳入json參數(shù),它將自動編碼并將Content-Type的置為application/json
payload = {'key1': 'value1', 'key2': 'value2'} r = requests.post("https://httpbin.org/post", json=payload) print(r.text)
如果data傳遞的參數(shù)為字符串,如:json.dumps(payload),則request對參數(shù)進(jìn)行url編碼,Content-Type的值為None,所以data傳字符串時,一定要在header中指定Content-Type
payload = {'key1': 'value1', 'key2': 'value2'} headers={"Content-Type": "application/json"} r = requests.post("https://httpbin.org/post", headers=headers,data=json.dumps(payload)) print(r.text)
如果data傳遞的是字典、元組組成的列表或列表作為值的字典,則request對參數(shù)進(jìn)行url編碼,Content-Type的值為application/x-www-form-urlencoded
# 字典 payload1 = {'key1': 'value1', 'key2': 'value2'} r = requests.post("https://httpbin.org/post", data=payload1) # 元組組成的列表 payload2 = [('key1', 'value1'), ('key1', 'value2')] r = requests.post("https://httpbin.org/post", data=payload2) # 列表作為值的字典 payload3 = {'key1': ['value1', 'value2']} r = requests.post("https://httpbin.org/post", data=payload3)
到此這篇關(guān)于Python requests.post()方法中data和json參數(shù)的使用方法的文章就介紹到這了,更多相關(guān)Python requests.post 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python浮點數(shù)取整、格式化和NaN處理的操作方法
這篇文章主要介紹了Python浮點數(shù)取整、格式化和NaN處理的操作方法,本文較詳細(xì)介紹了取整的三種方法,格式化浮點數(shù)輸出的示例代碼詳解,感興趣的朋友跟隨小編一起看看吧2022-05-05Flask實現(xiàn)的接口響應(yīng)中存在中文時接口返回為unicode亂碼的解決方法
本文給大家分享了新版Flask實現(xiàn)的接口響應(yīng)中存在中文時接口返回為unicode亂碼的解決方法,文中通過代碼示例和圖文介紹的非常詳細(xì),如果有遇到相同問題的朋友,可以參考閱讀本文2023-11-11解決Djang2.0.1中的reverse導(dǎo)入失敗的問題
今天小編就為大家分享一篇解決Djang2.0.1中的reverse導(dǎo)入失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08解決Tkinter中button按鈕未按卻主動執(zhí)行command函數(shù)的問題
這篇文章主要介紹了解決Tkinter中button按鈕未按卻主動執(zhí)行command函數(shù)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05利用Python的pandas數(shù)據(jù)處理包將寬表變成窄表
這篇文章主要介紹了利用Python的pandas數(shù)據(jù)處理包將寬表變成窄表,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09