使用Python请求向REST API发送XML文件

1 投票
2 回答
7064 浏览
提问于 2025-04-18 15:39

我正在尝试通过一个REST API的POST请求发送一个XML文件。这个API会接收这个XML并创建一个新的实体。

我想打开这个文件,然后通过请求发送它。

filename = 'test.xml'

response = requests.post(api_url, data=json.dumps(open(filename).readlines()))

但是我遇到了503错误(API无法获取正确的输入)。我的目的是将这个XML文件原封不动地发送给API。

如果我不使用json.dumps,就会出现ValueError: too many values to unpack的错误。

2 个回答

0

我觉得问题在于,你直接用 json.dumps() 把 XML 文件转换成 JSON 数据然后发送。我的猜测是这个 API 只接受 JSON 格式的数据。首先,你应该先把 XML 文件转换成一个 Python 字典或者其他合适的数据结构。然后再把这个数据结构转换成 JSON 格式。

1

你的API接受的是XML格式,而不是JSON格式。当你写 data = json.dumps(...) 的时候,其实是把JSON格式的数据传给了你的API。这就是你收到第一个错误信息的原因——503(API无法获取正确的输入)。

requests.post() 这个函数可以接收字典、字符串或者类似文件的对象作为它的 data= 参数。当你写 data = foo.readlines() 的时候,你传入的是一个列表(这既不是字符串也不是字典)。这就是你收到第二个错误信息的原因——"ValueError: too many values to unpack"。

由于我不了解你的API,所以很难猜测什么是正确的。不过,可以试试这个:

filename = 'test.xml'
response = requests.post(api_url, data=open(filename).read())

或者,几乎等价的,这个:

filename = 'test.xml'
response = requests.post(api_url, data=open(filename))

撰写回答