You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python3的requests库向REST API发送大XML文件?

解决requests传递大XML文件对接REST API的问题

你的问题核心在于没有正确模拟curl命令的请求格式,我们来一步步拆解解决:

问题分析

你用的curl命令curl -k https://10.244.1.2:4444/webconsole/APIController? -F "reqxml=MYxml.xml"中,-F参数是告诉curl以multipart/form-data的表单格式发送请求,把reqxml作为表单字段,值为MYxml.xml文件的内容。

而你现在的Python代码犯了两个关键错误:

  1. 尝试把大XML拼接到URL的查询参数中:URL有明确的长度限制(不同服务器配置通常在几KB到几十KB之间),大XML肯定会超出这个限制,直接导致请求失效。
  2. 直接把XML内容作为data参数发送:这会将XML作为raw请求体发送,和curl的表单请求格式完全不匹配,API无法正确识别你的参数。

正确的Python实现

我们需要用requests的files参数来模拟curl的-F行为,这样既符合API的预期格式,又能高效处理大文件(不需要一次性把整个XML读入内存):

推荐方式(高效处理大文件)

import requests

# 注意:URL不需要拼接reqxml参数,表单字段会通过files传递
url = 'https://10.244.1.2:4444/webconsole/APIController'

# 用with语句安全打开文件,requests会自动分块读取发送,避免内存溢出
with open('MYxml.xml', 'rb') as xml_file:
    # 构造表单字段:键是reqxml,值是文件对象
    files = {'reqxml': xml_file}
    # 发送请求,verify=False忽略SSL验证(生产环境建议配置合法证书)
    response = requests.post(url, files=files, verify=False)

print(response.text)

备选方式(读取文件内容后发送,适合小文件)

如果你需要先对XML内容做处理再发送,可以这样写:

import requests

url = 'https://10.244.1.2:4444/webconsole/APIController'

with open('MYxml.xml', 'r') as f:
    xml_content = f.read()

# 构造带元信息的表单数据,明确指定文件名和内容类型
files = {'reqxml': ('MYxml.xml', xml_content, 'application/xml')}
response = requests.post(url, files=files, verify=False)

print(response.text)

额外说明

  • 为什么用files而不是data?因为-F对应的是multipart/form-data表单,files参数是requests专门用来模拟这种请求的;如果用data={'reqxml': xml_content},会发送application/x-www-form-urlencoded格式的表单,部分API可能不兼容。
  • 生产环境请不要用verify=False,建议下载并配置目标服务器的SSL证书,避免安全风险。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:26:26