在http協議中,post提交的資料必須放在訊息主體中,但是協議中並沒有規定必須使用什麼編碼方式,從而導致了提交方式的不同。服務端根據請求頭中的content-type欄位來獲知請求中的訊息主體是用何種方式進行編碼,再對訊息主體進行解析。
具體的編碼方式包括如下:
以form表單形式提交資料,最常見也是大家最熟悉的
以json串提交資料。
- multipart/form-data #
上傳檔案
下面使用requests來傳送上述三種編碼的post請求。
requests提交form表單,一般存在於**的登入,用來提交使用者名稱和密碼。以 為例,在requests中,以form表單形式傳送post請求,只需要將請求的引數構造成乙個字典,然後傳給requests.post()的data引數即可。
**如下:
url = ''d =
r = requests.post(url, data=d) #
requests.post() 中利用 data 屬性
print r.text
輸出效果如下:
,"data
":""
,
"files
":{},
"form
":,
"headers
":,
"json
":null,
"origin
":"113.140.11.122",
"url
":""}
對於提交json串,主要是用於傳送ajax請求中,動態載入資料。以拼多多**為例,載入商品的方式為ajax,商品的內容在響應中。
下面把請求頭和請求實體列舉一下:
錯誤寫法:
importrequests
url = "
"data =
headers =
r = requests.post(url=url,data =data,headers=headers)
print(r.text)
列印的內容如下:
正確**是把data進行json編碼,再傳送。**如下:
r = requests.post(url=url,data=json.dumps(data),headers=headers) #利用 json 對 字典序列化
這個時候再看一下列印內容,已經正確返回商品內容了
完整**如下:
importrequests
url = "
"data =
headers =
r = requests.post(url=url,json =data,headers=headers) #
直接把字典傳給 requests.post() 的 json 引數
print(r.text)
上傳檔案在爬蟲中使用的很少,不過還是使用requests講解一下使用方式。content-type型別為multipart/form-data,以multipart形式傳送post請求,只需將一檔案傳給 requests.post() 的 files引數 即可。還是以 為例,**如下:
url = ''files =
r = requests.post(url, files=files #
檔案傳給 requests.post() 的 files 引數
print(r.text)
requests 傳送請求
使用python做介面自動化,必須用到requests這個庫,功能非常的強大,能滿足我們大部分的需求。官網 安裝 pip install requests requests傳送乙個請求非常簡單 import requests basic url 傳送get請求 r requests.get basi...
使用requests模組傳送帶有引數的請求
url編碼 在requests傳送get請求指定引數的格式 方式1 自己拼接乙個帶有引數的url import requests 傳送帶有引數的請求 方式1 拼接url 鍵盤錄入要搜尋的內容獲取搜尋結果 url url key input 請錄入你要搜尋的內容 url url key url url...
Python使用Request傳送POST請求
http協議規定post請求的資料必須放在訊息主體中,但是並沒有規定編碼方式,因此可以使用多種方式對其進行編碼。伺服器端通過請求頭的中content type欄位來獲知請求的訊息主體以何種方式編碼。具體的編碼方式包括 multipart form data 示例 import requests im...