python - requests提交的json.dumps不能被服務(wù)器解析
問題描述
背景:現(xiàn)有一看上去是內(nèi)嵌IE應(yīng)用程序A,可以做一些查詢等操作。
目的:通過借助Wireshark對(duì)應(yīng)用程A的通信過程分析,借助python的requests的庫自行構(gòu)造一個(gè)自己能掌控的程序B
狀況:在使用requests庫,加載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í)別。嘗試過給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來包括以下就可以了,應(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. apache web server 怎么限制某一個(gè)網(wǎng)站對(duì)服務(wù)器資源的占用?2. docker網(wǎng)絡(luò)端口映射,沒有方便點(diǎn)的操作方法么?3. docker start -a dockername 老是卡住,什么情況?4. java中返回一個(gè)對(duì)象,和輸出對(duì)像的值,意義在哪兒5. css3 - 純css實(shí)現(xiàn)點(diǎn)擊特效6. mysql - 在不允許改動(dòng)數(shù)據(jù)表的情況下,如何優(yōu)化以varchar格式存儲(chǔ)的時(shí)間的比較?7. 安全性測(cè)試 - nodejs中如何防m(xù)ySQL注入8. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?9. javascript - 關(guān)于apply()與call()的問題10. html5 - 請(qǐng)問現(xiàn)在主流的前端自動(dòng)化構(gòu)建工具是哪個(gè)?
