requests.post()方法中的data參數和json參數


最近在做requests請求時遇到如下報錯:

{"code":"500","message":"JSON parse error: Cannot construct instance of `com.bang.erpapplication.domain.User` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{\"name\":\"aa12345\", \"pwd\":\"lemon666\", \"age\":18, \"email\":\"121313927@qq.com\", \"phone\": \"15086666888\"}'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.bang.erpapplication.domain.User` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('{\"name\":\"aa12345\", \"pwd\":\"lemon666\", \"age\":18, \"email\":\"121313927@qq.com\", \"phone\": \"15086666888\"}')\n at [Source: (PushbackInputStream); line: 1, column: 1]"}

調查了半天,發現是requests調用post方法時,data參數和json參數沒搞明白。下面做一下梳理。

 

接口需求是: 請求格式為application/json。之前測試的接口用的是application/x-www-form-urlencoded格式,使用data傳字典,得到響應結果

這次使用json數據傳參,可以使用json和data兩種方式

 

json和dict

python中並沒有json類型這一說法,使用json.dumps(dict)將dict轉換成json格式,得到字符串對象

雖說json格式的數據在python中以字符串類型存在,但是通過str(dict)得到的結果和json.dumps(dict)得到的結果是不相同的

 可以看出來json格式的數據,除了要滿足字典類型的格式外,字符串對象必須要雙引號

 

requests的post請求

如果請求的數據格式為json,有2種方式:

1).  字典格式定義數據,使用json.dumps(dict)轉換成json數據,使用data參數進行報文提交

2).  直接使用json參數傳字典進行報文提交

 如果使用json=json.dumps(data)就會報最開始的錯誤 

可以在headers定義{"Content-Type": "application/json"}並傳輸,實測不傳也沒什么問題

 

其他

在requests.get()方法中可以使用params參數傳遞數據,有時候請求結果會呈現亂碼的狀態,可以通過res的encoding屬性查看編碼方式。

在獲取res.text之前對res.encoding='utf-8'賦值,這樣就可以解決請求結果亂碼的問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM