POST參數轉爲DICT

一、需求說明

當我們使用requests庫編寫爬蟲時,往往需要抓包分析其中的POST請求參數,然後再將其轉爲DICT類型。當我看到參數是這樣時:

dopost=login&userid=admin&pwd=admin

我心中不由笑開了花:這麼簡單,何必如此大費周章?對應的DICT不就是這樣麼:

{
 'dopost':'login',
 'userid':'admin',
 'pwd':'admin'
}

小明同學,專制各種不服!!!這位囂張的同學,請聽題:

orderType=-1&receUserInfo={"receUserName":"xxx","receUserCardCode":"xxxxxxxxxxxxxxxxxx","receUserCardCodeType":"1","receUserContact":"xxxxxxxxxxx"}&orderInfo=[{"supplierId":"3601","stationMapId":"7301908","endId":"10720428","endTypeId":"1","planId":"2020-04-07%2C07%3A50%2CX0518%2C430923019%2C430103","planDate":"2020-04-07","driveTime":"07:50","arMoney":86,"orderModelId":"1","goBackFlag":"1","orderCount":1,"ticketOrderMoneyInfo":{"orderMoney":76,"feeMoney":4,"yhqVo":{"yhqId":"","yhqMoney":""},"actionInfo":{"reduceActionCode":"","reduceMoney":0}},"insureOrderMoneyInfo":{"orderMoney":10,"inspackInfo":{"inspackId":602,"inspackReduceMoney":2}},"ticketInfo":[{"ticketTypeId":"1","userCadeType":"1","userCardCode":"xxxxxxxxxxxxxxxxxx","userCardName":"xxx","birthday":"1996-08-24","saveUserFlag":"Y","chooseInspackFlag":"Y","premiumInfo":[],"childInfo":{},"userMobile":"xxxxxxxxxxx"}],"discountInfo":{"cbFlag":"N","cbMoney":0,"intAmount":0}}]&schInfo=[{"ticketTypeList":[{"name":"全","price":"76","id":"1"}],"seats":"48","seatAmount":"42","drvTime":"07:50","schCanSellFlag":"1"}]&t=D3EDDEAF8D7C43B9A94C722982B71ED0

emmmm…對不起,打擾了,溜了遛了。

二、我的解決方案

要是我一個一個去打出來,也許情懷是允許的,可是髮量可不答應,於是我想了個辦法:

# =============================================================================
# POST請求參數轉dict
# =============================================================================
import json

post = '' # 這裏是請求包裏的POST參數
post_list = post.split('&') # 把參數轉爲list
data = {}
for p in post_list:
    try:
        data[p.split('=')[0]] = json.loads(p.split('=')[1]) # 如果參數裏含有字典等
    except:
        data[p.split('=')[0]] = p.split('=')[1] # 如果不含
print(data)


其實就是對字符串的處理,並通過json庫來進一步處理。(因爲某些參數可能本身包含字典、列表等類型)

寫在最後

感謝各位大大的閱讀~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章