1
Marmot 2017-11-06 16:56:39 +08:00
r = requests.post('http://0.0.0.0:5000/xxx', json=payload)
|
2
hagezhou OP @Marmot 我根据 postman 的返回结果,把 headers = {'Content-Type': 'text/plain'} 改了,但是 print 出来的 header 中还是 json ?
|
3
Marmot 2017-11-06 17:00:33 +08:00
还有就是有可能有些 content-type 大小写敏感。
|
5
gimp 2017-11-06 17:02:16 +08:00
r.headers 中保存的是服务器返回给你的 headers
|
6
focusheart 2017-11-06 17:04:04 +08:00
你的调用方法参数传递不太对,看返回情况,应该是不需要用 json.dumps 把字典对象转换为字符串吧?
参考 requests 官方的文档: http://cn.python-requests.org/zh_CN/latest/user/quickstart.html#post >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.post("http://httpbin.org/post", data=payload) 直接把字典对象给 data 参数,相当提交了一个这样的表单: <form action="http://httpbin.org/post" method="post"> <input type="text" name="key1" value="value1"/> <input type="text" name="key2" value="value2"/> </form> 或者按照 1 楼的方式,会自动转 json 编码,看你的服务器端怎么要求输入格式的了。 |
7
hagezhou OP @gimp python 这边返回的'Content-Type': 'application/json',这个和 postman 返回的 {'Content-Type': 'text/plain'} 还是不一致
|
9
hagezhou OP @Marmot 翻了一下 api.py, 用 params=payload 好了,多谢
源码注释这么写的: :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. :param data: (optional) Dictionary or list of tuples ``[(key, value)]`` (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. |
11
mec 2017-11-06 17:39:03 +08:00
调用的方式不对;
还有,你在 request header 里的 content-type 声明跟服务器返回给你的没联系吧。。。 |
12
dawncold 2017-11-06 21:31:34 +08:00
看起来像是服务端写得有问题,调试这种接口时可以用 https://requestb.in 这种工具
|
13
ry_wang 2017-11-06 21:53:55 +08:00
json= 改成 data=
|
14
Marsss 2017-11-07 08:42:45 +08:00
用 burp 代理,抓包看发出去的数据包,和正常是哪里不一样,就知道怎么解决问题了。
|