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

Python中更新XML值并发送POST请求报错问题求助

XML POST请求修改内容后报错的解决方案

问题说明

使用Python requests 发送XML格式POST请求时,默认payload可正常请求,但通过字符串拼接修改AcctId(原值0015151641988001)、替换时间字段(原值2022-12-13T16:21:10.813为当前时间)后请求报错。原请求代码如下:

headers = { 'Content-Type': 'application/xml' }
response = requests.request("POST", url, headers=headers, data=payload, verify=False)
print(response.text)

解决方案

1. 放弃字符串拼接,用XML解析库修改内容

字符串拼接极易破坏XML结构(比如标签闭合错误、特殊字符未转义、格式缩进混乱),建议用专业XML解析库处理,示例代码如下(以xml.etree.ElementTree为例):

import xml.etree.ElementTree as ET
import requests
from datetime import datetime

# 解析原始XML字符串
root = ET.fromstring(original_payload)

# 修改AcctId(根据实际XML结构调整XPath路径)
acct_id_node = root.find('.//AcctId')
if acct_id_node:
    acct_id_node.text = "你的新AcctId值"

# 修改时间字段(生成与原格式一致的当前时间)
time_node = root.find('.//DateTime')  # 替换为实际时间字段的标签名
if time_node:
    current_time = datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3]  # 保留三位毫秒
    time_node.text = current_time

# 重新生成合法XML字符串
modified_payload = ET.tostring(root, encoding='utf-8', method='xml')

# 发送请求
headers = { 'Content-Type': 'application/xml' }
response = requests.post(url, headers=headers, data=modified_payload, verify=False)
print(response.text)

2. 若坚持用字符串拼接,需验证XML合法性

如果一定要用字符串修改,完成后必须检查XML格式:

  • 确保所有标签正确闭合,无遗漏或多余标签
  • 特殊字符(如&、<、>)已转义为XML实体(&amp;、&lt;、&gt;)
  • 时间格式与原格式完全匹配(包括毫秒位数、T分隔符)
    可将修改后的payload复制到XML校验工具中确认结构合法。

3. 借助报错信息精准定位问题

打印完整的响应信息:

print("状态码:", response.status_code)
print("响应内容:", response.text)

根据返回的错误提示(比如400 Bad Request表示XML格式错误,403表示权限问题)针对性修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:35:24