requests傳送post請求的一些疑點

2022-07-03 16:39:11 字數 1890 閱讀 2930

在http協議中,post提交的資料必須放在訊息主體中,但是協議中並沒有規定必須使用什麼編碼方式,從而導致了提交方式的不同。服務端根據請求頭中的content-type欄位來獲知請求中的訊息主體是用何種方式進行編碼,再對訊息主體進行解析。具體的編碼方式包括如下:

multipart/form-data:上傳檔案

下面使用requests來傳送上述三種編碼的post請求。

requests提交form表單,一般存在於**的登入,用來提交使用者名稱和密碼。以 為例,在requests中,以form表單形式傳送post請求,只需要將請求的引數構造成乙個字典,然後傳給requests.post()的data引數即可。**如下:

url = ''

d =

r = requests.post(url, data=d)

print r.text

輸出效果如下:

,

"data":"",

"files":{},

"form":,

"headers":,

"json":null,

"origin":"113.140.11.122",

"url":""}

對於提交json串,主要是用於傳送ajax請求中,動態載入資料。以拼多多**為例,載入商品的方式為ajax,商品的內容在響應中。

下面把請求頭和請求實體列舉一下:

一些初學者根據請求頭寫爬蟲,就會犯requests的使用錯誤。

錯誤寫法

import requests

__author__ = 'qiye'

__date__ = '2018/5/19 21:59'

url = ""

data =

headers =

r = requests.post(url=url,data =data,headers=headers)

print(r.text)

列印的內容如下:

正確寫法1

正確**是把data進行json編碼,再傳送。**如下:

r = requests.post(url=url,data =json.dumps(data),headers=headers)
這個時候再看一下列印內容,已經正確返回商品內容了。

,

...

正確寫法2
import requests

__author__ = 'qiye'

__date__ = '2018/5/19 21:59'

url = ""

data =

headers =

r = requests.post(url=url,json =data,headers=headers)

print(r.text)

上傳檔案在爬蟲中使用的很少,不過還是使用requests講解一下使用方式。content-type型別為multipart/form-data,以multipart形式傳送post請求,只需將一檔案傳給requests.post()的files引數即可。還是以 為例,**如下:

url = ''

files =

r = requests.post(url, files=files)

print(r.text)

知識星球已經30人了,隨著人數的增多,**之後會**,越早關注越多優惠。星球的福利有很多:

使用requests傳送get post請求

首先是安裝requests庫 pip install requests 匯入requests庫 import requests 定義乙個url 入參直接寫在url內,使用問號隔開 url test 返回的資料定義為r url賦值為之前定義的值 r requests.get url url test ...

requests爬蟲傳送post請求

test.py import requests import json 安裝了python就有了json模組 url data headers res requests.post url,data data,headers headers print res.json mainorders with...

requests模組傳送POST請求

在http協議中,post提交的資料必須放在訊息主體中,但是協議中並沒有規定必須使用什麼編碼方式,從而導致了提交方式的不同。服務端根據請求頭中的content type欄位來獲知請求中的訊息主體是用何種方式進行編碼,再對訊息主體進行解析。具體的編碼方式包括如下 以form表單形式提交資料,最常見也是...