詳解python requests中的post請(qǐng)求的參數(shù)問題
問題:最新在爬取某站點(diǎn)的時(shí)候,發(fā)現(xiàn)在post請(qǐng)求當(dāng)中,參數(shù)構(gòu)造正確卻獲取不到數(shù)據(jù),索性將post的參數(shù)urlencode之后放到post請(qǐng)求的url后面變成get請(qǐng)求,結(jié)果成功獲取到數(shù)據(jù),對(duì)此展開疑問。
1.http請(qǐng)求中Form Data和Request Playload的區(qū)別:Ajax post請(qǐng)求中常用的兩種參數(shù)形式:form data 和 request payload
get請(qǐng)求的時(shí)候,我們的參數(shù)直接反映在url里面,為key1=value1&key2=value2形式,如果是post請(qǐng)求,那么表單參數(shù)是在請(qǐng)求體中,也是以key1=value1&key2=value2的形式在請(qǐng)求體中。通過chrome的開發(fā)者工具可以看到如下
a.Form Data類型:
這種情況有兩種處理方式,一個(gè)是把這個(gè)post請(qǐng)求變成get請(qǐng)求,即把請(qǐng)求參數(shù)通過'?key1=value1&key2=value2'拼接在url當(dāng)中,然后以get方式請(qǐng)求就可以了:response = requests.get(url,headers=headers),其中url為拼接的url
另一種是仍然用post請(qǐng)求,將參數(shù)放在data中:response = requests.post(url,headers=headers,data=data),其中url為post url.

注意上圖中紅圈內(nèi)的內(nèi)容,這里請(qǐng)求頭中的Content-Type為application/x-www-form-urlencoded,點(diǎn)擊Form Data旁邊的view source,變成了key1=value1&key2=value2形式,如下圖,這時(shí)你可以將這部分內(nèi)容加到post的Request URL后面使它變成一個(gè)get請(qǐng)求,就可以獲取到數(shù)據(jù)了,

b.Request Payload類型

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

自動(dòng)變成了json類型,這時(shí)必須發(fā)post請(qǐng)求,將這json對(duì)象傳入才可獲取數(shù)據(jù)。形如:
response = requests.post(url,json=data,headers=headers) 相比普通的post,這個(gè)post參數(shù)中的data一定要序列化才行。
參考:https://stackoverflow.com/questions/10494574/what-is-the-difference-between-form-data-and-request-payload
到此這篇關(guān)于詳解python requests中的post請(qǐng)求的參數(shù)問題的文章就介紹到這了,更多相關(guān)python requests post請(qǐng)求參數(shù)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 理解PHP5中static和const關(guān)鍵字2. Java如何基于反射機(jī)制獲取不同的類3. Android table布局開發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器4. IntelliJ IDEA安裝插件的方法步驟5. python 代碼實(shí)現(xiàn)k-means聚類分析的思路(不使用現(xiàn)成聚類庫)6. php模擬實(shí)現(xiàn)斗地主發(fā)牌7. asp判斷某個(gè)文件是否存在的函數(shù)8. Android 在 res/layout 文件夾 下創(chuàng)建一個(gè) 子文件夾實(shí)例9. PHP安全-命令注入10. Python random庫使用方法及異常處理方案

網(wǎng)公網(wǎng)安備