論如何實(shí)現(xiàn)multipart/form-data類型的post請(qǐng)求-python爬蟲

近日,友人發(fā)來一鏈接,說頁面請(qǐng)求分析過程中碰到一個(gè)奇怪的post請(qǐng)求,于是乎,好奇心旺盛的博主也立馬上手研究起來。
報(bào)文截圖如下,不知各位看官是否遇見過這樣的請(qǐng)求體。


Payload截圖

好了,報(bào)文有了,那么我們就開始分析這其中的原理,并最終實(shí)現(xiàn)模擬功能。
首先,報(bào)文中多次出現(xiàn)webkitFormBoundary這個(gè)關(guān)鍵字,我猜測這肯定是某種函數(shù)或者軟件自動(dòng)生成的結(jié)果。
與此同時(shí),我們也必須研究下請(qǐng)求頭,截圖如下


請(qǐng)求頭

如圖中標(biāo)紅部分,一個(gè)是multipart/from-data,一個(gè)是boundary,在看到后者的瞬間,博主心中大喊“原來如此!”
ok,payload的組成一定與content-Type有關(guān),借助谷歌,博主自我科普了一把multipart/form-data的概念。
諸位有興趣的可以看下方鏈接,

http://www.itdecent.cn/p/e810d1799384
https://stackoverflow.com/questions/3508338/what-is-the-boundary-in-multipart-form-data
http://docs.python-requests.org/en/master/user/quickstart/#post-a-multipart-encoded-file
https://stackoverflow.com/questions/12385179/how-to-send-a-multipart-form-data-with-requests-in-python/12385661#12385661

好了,原生的requests對(duì)這類請(qǐng)求支持不是很好,根據(jù)官方文檔,我們需要使用requests-toolbelt 這個(gè)庫,詳細(xì)的介紹大家可以搜索這個(gè)幫助文檔。
具體代碼如下:

import requests
from requests_toolbelt  import MultipartEncoder
headers={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding':'gzip, deflate',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Connection':'keep-alive',
    'Host':'sydwjg.sdbb.gov.cn',
    'Content-Type':'',
    'Content-Length':'907',
    'Referer':'',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}
file_payload = {'xydm':'',
        'confirm_before_do':'查詢'
}
m = MultipartEncoder(file_payload)
headers['Content-Type'] = m.content_type
url_origin = '目標(biāo)網(wǎng)址'
resp = requests.post(url_origin,headers=headers,data=m,timeout=10)
print(resp.status_code)

不過話說回來,現(xiàn)在很少有網(wǎng)站用到這種請(qǐng)求,或者我猜測文件上傳用到這種方式比較多。。
anyway,新技能點(diǎn)get!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容