python - requests提交的json.dumps不能被服務(wù)器解析
問題描述
背景:現(xiàn)有一看上去是內(nèi)嵌IE應(yīng)用程序A,可以做一些查詢等操作。
目的:通過借助Wireshark對應(yīng)用程A的通信過程分析,借助python的requests的庫自行構(gòu)造一個(gè)自己能掌控的程序B
狀況:在使用requests庫,加載json格式的POST數(shù)據(jù),執(zhí)行特定請求時(shí),遇到對方服務(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對程序A請求的偵聽:
自行構(gòu)造請求時(shí)的報(bào)錯(cuò)信息:
猜測這個(gè)請求的構(gòu)造基本成功了,但對端應(yīng)用程序解析我POST的數(shù)據(jù)時(shí)不能正常識(shí)別。嘗試過給json.dumps加, ensure_ascii=False的參數(shù),但報(bào)錯(cuò)依舊。如果這個(gè)猜測正確的話,POST數(shù)據(jù)應(yīng)該怎樣正確dumps?如果這個(gè)猜測不正確,那么可能是哪里的原因?
問題解答
回答1:data不需要json.dump,只需要將data中的jsonstr用json.dump來包括以下就可以了,應(yīng)該是這樣,可以試試
回答2:Response Code 是500,是對方反序列化時(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. boot2docker無法啟動(dòng)2. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””3. docker-compose中volumes的問題4. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.5. nignx - docker內(nèi)nginx 80端口被占用6. java - SSH框架中寫分頁時(shí)service層中不能注入分頁類7. javascript - mock.js可以存儲(chǔ)數(shù)據(jù)嗎8. docker api 開發(fā)的端口怎么獲取?9. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?10. golang - 用IDE看docker源碼時(shí)的小問題

網(wǎng)公網(wǎng)安備