1. 程式人生 > >requests.post()方法中的data、json引數詳解

requests.post()方法中的data、json引數詳解

json和dict python中的dict型別要轉換為json格式的資料需要用到json庫:

import json   <json> = json.dumps(<dict>) <dict> = json.loads(<json>) 需要注意的是python中並沒有json型別這一說法,通過json.dumps(<dict>)轉換的字典物件,最後得到的是一個字串物件,也就是說,在python中json格式的資料實際上就是一個字串

>>> j = json.dumps(<dict>) >>> type(j) <class 'str'> 雖說json格式的資料在python中是以字串的型別存在的,但是通過str(<dict>)工廠函式所得到的結果同json.dumps(<dict>)方法所得到的結果是不相同的

>>> 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的區別在於引號。對於可以作為json.loads(<str>)引數物件的字串,除了要滿足字典型別的格式外,所有的字串物件必須是雙引號。

requests.post() 在通過requests.post()進行POST請求時,傳入報文的引數有兩個,一個是data,一個是json。 常見的form表單可以直接使用data引數進行報文提交,而data的物件則是python中的字典型別; 而在最新爬蟲的過程中遇到了一種payload報文,是一種json格式的報文,因此傳入的報文物件也應該是格式的;這裡有兩種方法進行報文提交:

import requests import json   url = "http://example.com" data = {     'a': 1,     'b': 2, } # 1 requests.post(url, data=json.dumps(data)) # 2-json引數會自動將字典型別的物件轉換為json格式 requests.post(url, json=data) 其它 在requests.get()方法中可以使用params引數來構建url 有時候請求得到的結果可能呈現亂碼的狀態,可以通過resp.encoding屬性檢視網頁編碼方式,同時可以在獲取resp.text之前對resp.encoding='utf-8'賦值,這樣再次獲取的resp.text則會使用我們要求的編碼方式。