python - requests提交的json.dumps不能被服務(wù)器解析
問題描述
背景:現(xiàn)有一看上去是內(nèi)嵌IE應(yīng)用程序A,可以做一些查詢等操作。
目的:通過(guò)借助Wireshark對(duì)應(yīng)用程A的通信過(guò)程分析,借助python的requests的庫(kù)自行構(gòu)造一個(gè)自己能掌控的程序B
狀況:在使用requests庫(kù),加載json格式的POST數(shù)據(jù),執(zhí)行特定請(qǐng)求時(shí),遇到對(duì)方服務(wù)器的報(bào)錯(cuò)。
payload_data={'jsonstr':{'pagesize':10,'pageindex':1,'start':'2017-03-01','end':'2017-03-13','keyword':'張三','status':'0'}}r = requests.post(url, headers = headers_comm, data = json.dumps(payload_data))
Wireshark對(duì)程序A請(qǐng)求的偵聽:
自行構(gòu)造請(qǐng)求時(shí)的報(bào)錯(cuò)信息:
猜測(cè)這個(gè)請(qǐng)求的構(gòu)造基本成功了,但對(duì)端應(yīng)用程序解析我POST的數(shù)據(jù)時(shí)不能正常識(shí)別。嘗試過(guò)給json.dumps加, ensure_ascii=False的參數(shù),但報(bào)錯(cuò)依舊。如果這個(gè)猜測(cè)正確的話,POST數(shù)據(jù)應(yīng)該怎樣正確dumps?如果這個(gè)猜測(cè)不正確,那么可能是哪里的原因?
問題解答
回答1:data不需要json.dump,只需要將data中的jsonstr用json.dump來(lái)包括以下就可以了,應(yīng)該是這樣,可以試試
回答2:Response Code 是500,是對(duì)方反序列化時(shí)出錯(cuò)了。根據(jù)exception信息,服務(wù)端因該是以下面方式進(jìn)行反序列化的。
C#:
var jsonObj = (new JavaScriptSerializer()).Deserialize<IDictionary<string, string>>(jsonString);
你的payload_data格式錯(cuò)了,是嵌套字典。
把payload_data改成:Python:
payload_data={'pagesize':10,'pageindex':1,'start':'2017-03-01','end':'2017-03-13','keyword':'張三','status':'0'}
就可以了。
相關(guān)文章:
1. mysql - 這條聯(lián)合sql語(yǔ)句哪里錯(cuò)了2. docker容器呢SSH為什么連不通呢?3. webpack - vuejs+java前后臺(tái)分離實(shí)現(xiàn)及部署問題4. docker start -a dockername 老是卡住,什么情況?5. docker鏡像push報(bào)錯(cuò)6. python - 速度最快的啟動(dòng)界面GUI7. 網(wǎng)站在移動(dòng)的環(huán)境下手機(jī),pc打不開8. python - pip install出現(xiàn)下面圖中的報(bào)錯(cuò) 什么原因?9. javascript - stylus格式的圖標(biāo)字體里url無(wú)法解析10. javascript - js一個(gè)call和apply的問題?
