Python 如何向XML格式字符串中正确传入username和password参数
解决方案
首先你原来的代码存在两个核心问题:
- XML本身结构错误:开头根节点写的是
<soap-env>,结尾闭合标签是</soap-env:Envelope>,标签不匹配会导致后续任何字符串操作生成的XML都是无效的 - 直接拼接参数没有做XML特殊字符转义,当
login或password包含<、>、&等XML预留字符时,会直接破坏整个XML结构
方案1:f-string快速实现(适合简单场景)
用Python f-string格式化即可,同时补充XML字符转义逻辑:
import xml.sax.saxutils def test(login,password): # 转义XML特殊字符,避免格式损坏 escaped_login = xml.sax.saxutils.escape(login) escaped_pwd = xml.sax.saxutils.escape(password) # 字符串前加f启用格式化,占位变量用{}包裹 data = f"""<?xml version="1.0"?> <soap-env:Envelope> <soap-env:Body> <Auth> <Login>{escaped_login}</Login> <password>{escaped_pwd}</password> </Auth> <Ping> </Ping> </soap-env:Body> </soap-env:Envelope>""" return data
方案2:XML节点构造(适合生产环境,更安全)
直接用Python标准库xml.etree.ElementTree构造XML节点,从根源避免格式错误和注入风险:
import xml.etree.ElementTree as ET def test(login,password): # 逐层构造XML节点 envelope = ET.Element("soap-env:Envelope") body = ET.SubElement(envelope, "soap-env:Body") auth = ET.SubElement(body, "Auth") login_tag = ET.SubElement(auth, "Login") login_tag.text = login pwd_tag = ET.SubElement(auth, "password") pwd_tag.text = password ET.SubElement(body, "Ping") # 拼接XML声明和节点内容 return '<?xml version="1.0"?>\n' + ET.tostring(envelope, encoding='unicode')
内容的提问来源于stack exchange,提问作者Marwen Aydi
相关产品推荐
相关产品推荐

