我們知道,request 庫的post請求方法即支持data 傳參也支持json傳參
import requests,json url = 'http://httpbin.org/post' data = {'some': 'data'} r1 = requests.post(url, data=data) r2 = requests.post(url,data=json.dumps(data)) r3 = requests.post(url,json=data) r4 = requests.post(url=url,json=json.dumps(data)) # data 傳入dict # 查看輸出 Content-Type:application/x-www-form-urlencoded # 即鍵值對的形式: # 類似some=data&xxx=xxx 的形式 print(r1.request.headers)
# data 傳入str類型參數 # 查看輸出 Content-Type沒設置 print(r2.request.headers) # json 傳入dict和str類型參數 # request內置的json會將dict 轉換成json字符串 # 查看輸出Content-Type自動設置為application print(r3.request.headers) print(r4.request.headers) # 獲取請求參數 print(r3.request.body) print(r4.request.body)
總結:
使用data傳參時:
data傳入 dict 時,請求頭 默認設置為Content-Type:application/x-www-form-urlencoded
data 傳入str 時,請求頭不會默認設置任何 內容類型,如果想要使用data傳參str類型的參數時
建議單獨設置一個請求頭並設置其內容類型為'Content-Type': 'application/json'
json 傳參時,傳參類型必須是str ,requests庫 將會默認設置請求頭的內容類型為'Content-Type': 'application/json'
但需要注意的是,參數類型為dict的情況下 是無需將dict 轉換為str的,
因為在requests模塊內部已經自動為你做了這件事