問題:最新在爬取某站點的時候,發現在post請求當中,參數構造正確卻獲取不到數據,索性將post的參數urlencode之后放到post請求的url后面變成get請求,結果成功獲取到數據,對此展開疑問。
1.http請求中Form Data和Request Playload的區別:
Ajax post請求中常用的兩種參數形式:form data 和 request payload
get請求的時候,我們的參數直接反映在url里面,為key1=value1key2=value2形式,如果是post請求,那么表單參數是在請求體中,也是以key1=value1key2=value2的形式在請求體中。通過chrome的開發者工具可以看到如下
a.Form Data類型:
這種情況有兩種處理方式,一個是把這個post請求變成get請求,即把請求參數通過"?key1=value1key2=value2"拼接在url當中,然后以get方式請求就可以了:response = requests.get(url,headers=headers),其中url為拼接的url
另一種是仍然用post請求,將參數放在data中:response = requests.post(url,headers=headers,data=data),其中url為post url.

注意上圖中紅圈內的內容,這里請求頭中的Content-Type為application/x-www-form-urlencoded,點擊Form Data旁邊的view source,變成了key1=value1key2=value2形式,如下圖,這時你可以將這部分內容加到post的Request URL后面使它變成一個get請求,就可以獲取到數據了,

b.Request Payload類型

同樣在chrome瀏覽器開發者工具中可以看到它們不同的地方,Content-Type為application/json,表明需要傳的是一個json類型的對象,點擊view source,如下圖

自動變成了json類型,這時必須發post請求,將這json對象傳入才可獲取數據。形如:
response = requests.post(url,json=data,headers=headers)
相比普通的post,這個post參數中的data一定要序列化才行。
參考:https://stackoverflow.com/questions/10494574/what-is-the-difference-between-form-data-and-request-payload
到此這篇關于詳解python requests中的post請求的參數問題的文章就介紹到這了,更多相關python requests post請求參數內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python爬蟲請求庫httpx和parsel解析庫的使用測評
- python爬蟲系列網絡請求案例詳解
- 快速一鍵生成Python爬蟲請求頭
- Python3+Django get/post請求實現教程詳解
- python 實現Requests發送帶cookies的請求
- python實現三種隨機請求頭方式
- Python urllib request模塊發送請求實現過程解析
- python 爬蟲請求模塊requests詳解
- Python Http請求json解析庫用法解析
- python 發送get請求接口詳解
- python+excel接口自動化獲取token并作為請求參數進行傳參操作
- Python使用grequests并發發送請求的示例
- Python爬蟲基礎講解之請求