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实体(&、<、>) - 时间格式与原格式完全匹配(包括毫秒位数、
T分隔符)
可将修改后的payload复制到XML校验工具中确认结构合法。
3. 借助报错信息精准定位问题
打印完整的响应信息:
print("状态码:", response.status_code) print("响应内容:", response.text)
根据返回的错误提示(比如400 Bad Request表示XML格式错误,403表示权限问题)针对性修复。
内容的提问来源于stack exchange,提问作者Yuvraj Thapa
相关产品推荐
相关产品推荐

