Python提供了一个预期版本的Python请求,并尝试创建以下curl命令:curl -F 'json={"method":"update_video","params":{"video":{"id":"129263001","itemState":"INACTIVE"},"token":"jCoXH5OAMYQtXm1sg62KAF3ysG90YLagDAdlhg.."}}' https://api.somewebservice.com/services/post
使用:
^{pr2}$
我得到以下信息(仅包括所有TLS握手后的输出、服务器证书数据等):....
> POST /services/post HTTP/1.1
> User-Agent: curl/7.41.0
> Host: api.somewebservice.com
> Accept: */*
> Content-Length: 294
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------871a9aa84d3c0de2
>
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Content-Type: application/json;charset=UTF-8
< Content-Length: 1228
< Date: Sun, 10 Apr 2016 07:04:00 GMT
< Server: somewebservice
考虑到上面的cURL命令可以完美地工作,并且这里的输出是在冗余模式下运行的,那么如果我试图使用Python请求重新创建JSON对象,我需要采用多部分/表单的方法以表单形式发送JSON对象,这是否正确?在
到目前为止,我试过:import requests
import json
def deactivate_request():
url = "https://api.somewebservice.com/services/post"
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
payload = {"method":"update_video","params":{"video":{"id":"12926301","itemState":"INACTIVE"},"token":"jCoXH5OKAF3ysG90YLagEECTP16uOUSg_fEGDAdlhg.."}}
r = requests.post(url, json=payload, headers=headers)
print(r.text)
我也尝试过不同的变体,比如:r = requests.post(url, data=json.dumps(payload), headers=headers)
或者没有标题,像这样:r = requests.post(url, data=json.dumps(payload))
或者这个:r = requests.post(url, json=payload)
似乎什么都不管用,我只是一直收到同样的错误信息:{"error": {"name":"MissingJSONError","message":"Could not find JSON-RPC.","code":211}, "result": null, "id": null}
该“211”错误的web服务文档说明:
对于json参数(对于非multipart post)或多部分post的第一部分,我们得到一个空字符串。
在使用Requests模块重新创建cURL请求方面,我在这里做了什么错事?我以为我可以将payload对象作为表单编码的数据发送,而cURL命令在那里处理-F参数。在