requests.post()方法中data和json參數(shù)的使用
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)換的字典對(duì)象,最后得到的是一個(gè)字符串對(duì)象,也就是說,在python中json格式的數(shù)據(jù)實(shí)際上就是一個(gè)字符串
>>> 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ū)別在于引號(hào)。對(duì)于可以作為json.loads(<str>)參數(shù)對(duì)象的字符串,除了要滿足字典類型的格式外,所有的字符串對(duì)象必須是雙引號(hào)。
requests.post()
在通過requests.post()進(jìn)行POST請(qǐng)求時(shí),傳入報(bào)文的參數(shù)有兩個(gè),一個(gè)是data,一個(gè)是json。
常見的form表單可以直接使用data參數(shù)進(jìn)行報(bào)文提交,而data的對(duì)象則是python中的字典類型;
而在最新爬蟲的過程中遇到了一種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ù)來構(gòu)建url
有時(shí)候請(qǐng)求得到的結(jié)果可能呈現(xiàn)亂碼的狀態(tài),可以通過resp.encoding屬性查看網(wǎng)頁編碼方式,同時(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)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python字符串對(duì)齊方法使用(ljust()、rjust()和center())
這篇文章主要介紹了Python字符串對(duì)齊方法使用(ljust()、rjust()和center()),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python實(shí)現(xiàn)號(hào)碼歸屬地查詢功能
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)對(duì)手機(jī)號(hào)碼進(jìn)行地域分析并查詢歸屬地的功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-12-12python目標(biāo)檢測(cè)yolo3詳解預(yù)測(cè)及代碼復(fù)現(xiàn)
這篇文章主要為大家介紹了python目標(biāo)檢測(cè)yolo3詳解預(yù)測(cè)及代碼復(fù)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python + opencv對(duì)拍照得到的圖片進(jìn)行背景去除的實(shí)現(xiàn)方法
這篇文章主要介紹了Python + opencv對(duì)拍照得到的圖片進(jìn)行背景去除的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11opencv實(shí)現(xiàn)礦石圖片檢測(cè)礦石數(shù)量
這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)礦石圖片檢測(cè)礦石數(shù)量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08pyinstaller打包多個(gè)py文件和去除cmd黑框的方法
今天小編就為大家分享一篇pyinstaller打包多個(gè)py文件和去除cmd黑框的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06python代碼實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python代碼實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Python實(shí)現(xiàn)的將文件每一列寫入列表功能示例【測(cè)試可用】
這篇文章主要介紹了Python實(shí)現(xiàn)的將文件每一列寫入列表功能,涉及Python文件讀取、遍歷、序列追加、賦值等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03