【发布时间】:2014-08-06 21:47:29
【问题描述】:
我正在尝试模仿我正在使用 python 调用的 curl 请求。请注意,
- HTTPS 请求
- 忽略 SSL 认证验证
- 我的服务器是 django
我使用的curl命令是
curl -k --dump-header - -H "Content-Type: application/json" -X POST --data '{"environment_name": "foo"}' https://localhost/api/v1/environment/
服务器响应成功
HTTP/1.1 201 CREATED
Date: Tue, 17 Jun 2014 00:59:59 GMT
Server: Server
Vary: Accept-Language,Cookie,User-Agent
Content-Language: en-us
Location: https://localhost/api/v1/environment/None/
Status: 201 CREATED
Content-Length: 0
Cneonction: close
Content-Type: text/html; charset=utf-8
但是,当我尝试在 python 中使用“请求”进行发布请求时,我的脚本是
import json
data = {'enviornment_name' : 'foo'}
headers = {'Content-type' : 'application/json'}
response = requests.post("https://localhost/api/v1/environment", headers=headers, data=data, verify=False)
运行脚本时,我得到一个巨大的堆栈跟踪,但红色部分是
E DecodeError: ('Received response with content-encoding: gzip, but failed to decode it.', error('Error -3 while decompressing: incorrect data check',))
我不知道为什么我的脚本不能通过 python 工作
【问题讨论】:
-
尝试使用
json.dump(data)编码data -
请在此处阅读文档:docs.python.org/2/library/json.html
-
@Fabricator 它返回了相同的错误,尽管我确实注意到堆栈跟踪的较高位置显示了错误代码 403,所以发布请求可能与 curl 所做的不同?
-
很奇怪。不用
verify=False试试? -
@Fabricator 我需要 verify=False 但是我注意到我的代码中有一个问题是我正在使用的服务器的问题,我需要在 URI 末尾添加尾随“/”。此外,我还需要 json.dumps(data) 而不是 json.dump(data) 以防其他人正在寻找。
标签: python json curl python-requests