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