robotestインタフェース自動化テストの複雑post入参処理-転載自【不正なkimol君】


不真面目なキモ君に転載
https://blog.csdn.net/kimol_justdo/article/details/105354722
 
一、需要説明
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ライブラリでさらに処理します.(一部のパラメータには辞書、リストなどのタイプが含まれている可能性があります)