使用Python请求向REST API发送XML文件
我正在尝试通过一个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))