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

Python 如何向XML格式字符串中正确传入username和password参数

解决方案

首先你原来的代码存在两个核心问题:

  1. XML本身结构错误:开头根节点写的是<soap-env>,结尾闭合标签是</soap-env:Envelope>,标签不匹配会导致后续任何字符串操作生成的XML都是无效的
  2. 直接拼接参数没有做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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:15:02