【发布时间】:2018-05-11 20:45:15
【问题描述】:
我正在尝试使用 requests 库与 REST API 进行交互。
我需要将一个大型 XML 文件传递给 API - 我可以在 Linux 中使用 curl 轻松完成此操作,但我想要一种 Python 方式来执行此操作。
在 curl 中,我的语法如下所示:
curl -k https://10.244.1.2:4444/webconsole/APIController? -F "reqxml=MYxml.xml"
注意:-k 标志只是忽略 ssl 错误
到目前为止,这是我想出的:
import requests
url = r'https://10.244.1.2:4444/webconsole/APIController?reqxml='
x = open('MYxml.xml', 'r').read()
q = requests.post(url, data=x, verify=False)
print(q.text)
如果我将 q 变量更改为:q = requests.post(url + x, verify=False)
然后该命令将起作用。但是,对于较长的 XML 文件,它将失败。
我看过这两个相关的帖子:First,Second 但这些建议看起来就像我的语法,除非我遗漏了一些明显的东西
感谢任何帮助!
【问题讨论】:
-
我看不出请求语法有什么问题。你能描述一下网络服务器吗?在黑暗中尝试一下,Web 服务器可能会期待一个“Content-Type”xml 标头,而 curl 会自动添加它。使用 -v(详细日志记录)再次执行 curl 命令并查看请求标头。
-
API 是 Sophos XG 防火墙。它的文档非常稀疏,所以我不确定标题。我会尝试 curl 建议。感谢您的提示
-
@BrennenSprimont 所以我可以看到 curl 正在添加
multipart/form-data作为内容类型。我尝试将其添加到查询中,但没有运气。 -
为了它,尝试添加一个“application/xml”表单类型。比如:
q = requests.post(url, data=x, verify=False, headers={"Content-Type":"application/xml"}) -
@BrennenSprimont 在发布之前我已经尝试过这些标题。我也以为会这样。
标签: python-3.x rest api python-requests