python-requests 相当于 curl 的 --data-binary?

par*_*axi 5 python rest python-requests

Curl 可以使用--data-binary 选项发送文件。

测试Qualys WAS API 时,以下 curl 命令有效:

curl -u "username:password" -H "content-type: text/xml" -X "POST" --data-binary @- "https://qualysapi.qualys.com/qps/rest/3.0/search/was/webapp" < post.xml
Run Code Online (Sandbox Code Playgroud)

帖子.xml:

<ServiceRequest><filters><Criteria operator="CONTAINS" field="name">PB - </Criteria></filters></ServiceRequest>
Run Code Online (Sandbox Code Playgroud)

使用 Python 的请求模块,我不断收到 HTTPError: 415 Client Error: Unsupported Media Type。

import requests
url = 'https://qualysapi.qualys.com/qps/rest/3.0/search/was/webapp'
payload = '<ServiceRequest><filters><Criteria operator="CONTAINS" field="name">PB - </Criteria></filters></ServiceRequest>'
headers = {'X-Requested-With': 'Python requests', 'Content-type': 'application/json'}
r = requests.post(url, data=payload, headers=headers, auth=('username', 'password'))
Run Code Online (Sandbox Code Playgroud)

当尝试提交文件 files 参数时,它也以 415 错误结束。

import requests
url = 'https://qualysapi.qualys.com/qps/rest/3.0/search/was/webapp'
payload = '<ServiceRequest><filters><Criteria operator="CONTAINS" field="name">PB - </Criteria></filters></ServiceRequest>'
headers = {'X-Requested-With': 'Python requests', 'Content-type': 'application/json'}
r = requests.post(url, data=payload, headers=headers, auth=('username', 'password'))
Run Code Online (Sandbox Code Playgroud)

我设置它的原因是将它合并到qualysapi Python 包中

par*_*axi 2

原来我应该有的标题是

headers = {'X-Requested-With': 'Python requests', 'Content-type': 'text/xml'}
Run Code Online (Sandbox Code Playgroud)