python - requests提交的json.dumps不能被服務(wù)器解析
問(wèn)題描述
背景:現(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)求的偵聽(tī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è)不正確,那么可能是哪里的原因?
問(wèn)題解答
回答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. 前端 - html5 audio不能播放2. java固定鍵值轉(zhuǎn)換,使用枚舉實(shí)現(xiàn)字典?3. vim - win10無(wú)法打開(kāi)markdown編輯器4. mysql - 千萬(wàn)數(shù)據(jù) 分頁(yè),當(dāng)偏移量 原來(lái)越大時(shí),怎么優(yōu)化速度5. 如何解決tp6在zend中無(wú)代碼提示6. javascript - 有沒(méi)有類似高鐵管家的時(shí)間選擇插件7. 這是什么情況???8. python - flask學(xué)習(xí),user_syy添加報(bào)role is invalid keyword for User.9. css - BEM 中塊(Block)有木有什么標(biāo)準(zhǔn) 何時(shí)決定一個(gè)部分提取為塊而不是其父級(jí)的元素呢(Element)?~10. javascript - 微信網(wǎng)頁(yè)開(kāi)發(fā)從菜單進(jìn)入頁(yè)面后,按返回鍵沒(méi)有關(guān)閉瀏覽器而是刷新當(dāng)前頁(yè)面,求解決?
