Python requests.post()方法中data和json參數(shù)的使用方法
json和dict
python中的dict類型要轉(zhuǎn)換為json格式的數(shù)據(jù)需要用到j(luò)son庫(kù):
import json <json> = json.dumps(<dict>) <dict> = json.loads(<json>)
需要注意的是:
python中并沒(méi)有json類型這一說(shuō)法,通過(guò)json.dumps(<dict>)轉(zhuǎn)換的字典對(duì)象,最后得到的是一個(gè)字符串對(duì)象,在python中json格式的數(shù)據(jù)實(shí)際上就是一個(gè)字符串。
>>> j = json.dumps(<dict>) >>> type(j) <class 'str'>
雖說(shuō)json格式的數(shù)據(jù)在python中是以字符串的類型存在的,但是通過(guò)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ū)別在于引號(hào)
對(duì)于可以作為json.loads(<str>)參數(shù)對(duì)象的字符串,除了要滿足字典類型的格式外,所有的字符串對(duì)象必須是雙引號(hào)。
requests.post()
在通過(guò)requests.post()進(jìn)行POST請(qǐng)求時(shí),傳入報(bào)文的參數(shù)有兩個(gè),一個(gè)是data,一個(gè)是json
常見(jiàn)的form表單可以直接使用data參數(shù)進(jìn)行報(bào)文提交,而data的對(duì)象則是python中的字典類型;
在爬蟲(chóng)的過(guò)程中遇到了一種payload報(bào)文,是一種json格式的報(bào)文,因此傳入的報(bào)文對(duì)象也應(yīng)該是格式的;
這里有兩種方法進(jìn)行報(bào)文提交:
import requests
import json
url = "http://example.com"
data = {
'a': 1,
'b': 2,
}
# 1
requests.post(url, data=json.dumps(data))
# 2-json參數(shù)會(huì)自動(dòng)將字典類型的對(duì)象轉(zhuǎn)換為json格式
requests.post(url, json=data)其它:
在requests.get()方法,中可以使用params參數(shù)來(lái)構(gòu)建url
請(qǐng)求得到的結(jié)果可能呈現(xiàn)亂碼的狀態(tài),可以通過(guò)resp.encoding屬性查看網(wǎng)頁(yè)編碼方式,同時(shí)可以在獲取resp.text之前對(duì)resp.encoding='utf-8'賦值,這樣再次獲取的resp.text則會(huì)使用我們要求的編碼方式。
post請(qǐng)求中json和data的區(qū)別
post請(qǐng)求中,可以使用data傳遞參數(shù),也可以使用json傳遞參數(shù)
兩種方式有什么區(qū)別?
如果參數(shù)為JSON數(shù)據(jù),可以直接傳入json參數(shù),它將自動(dòng)編碼并將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對(duì)參數(shù)進(jìn)行url編碼,Content-Type的值為None,所以data傳字符串時(shí),一定要在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對(duì)參數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python編寫(xiě)一個(gè)基于插件架構(gòu)的圖片瀏覽器
這篇文章主要為大家詳細(xì)介紹了如何使用Python開(kāi)發(fā)一個(gè)基于插件架構(gòu)的圖片瀏覽器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01
Pytorch出現(xiàn)錯(cuò)誤Attribute?Error:module?‘torch‘?has?no?attrib
這篇文章主要給大家介紹了關(guān)于Pytorch出現(xiàn)錯(cuò)誤Attribute?Error:module?‘torch‘?has?no?attribute?'_six'解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
python3.6.8 + pycharm + PyQt5 環(huán)境搭建的圖文教程
這篇文章主要介紹了python3.6.8 + pycharm + PyQt5 環(huán)境搭建,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
python實(shí)現(xiàn)linux服務(wù)器批量修改密碼并生成execl
這篇文章主要介紹了python實(shí)現(xiàn)linux服務(wù)器批量修改密碼并生成execl示例,需要的朋友可以參考下2014-04-04
詳解sklearn?Preprocessing?數(shù)據(jù)預(yù)處理功能
這篇文章主要介紹了sklearn?Preprocessing?數(shù)據(jù)預(yù)處理功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
Python 中 Selenium 的 getAttribute()
本文將解釋如何使用Selenium的getAttribute()方法,getAttribute() 方法可以檢索元素屬性,例如錨標(biāo)記的 href 屬性, 該函數(shù)最初將嘗試返回指定屬性的值,感興趣的朋友跟隨小編一起看看吧2023-11-11

