python - 使用带有转义字符作为参数的 XML 使用 WSDL url

标签 python xml django soap wsdl

我正在执行一个 SOAP Web 服务的方法,该方法使用 suds 库接收 3 个字符串参数。

第一个字符串参数应该是一个 XML,另外两个是用户名和密码,这是我的半工作实现。

from suds.client import Client
url = "http://www.jonima.com.mx:3014/sefacturapac/TimbradoService?wsdl"
client = Client(url)
client.service.timbrado(XML_AS_STRING_HERE, 'PRUEBA1', '12345678')

当第一个参数包含转义字符(& 符号、引号、撇号、小于、大于)时,方法不起作用,因为服务器将文本解释为未转义。如果不包含任何这些字符,则该方法效果很好

不带符号的 XML 示例有效 http://dl.dropbox.com/u/1990697/no_amp.xml

带有 & 符号的 XML 示例不起作用 http://dl.dropbox.com/u/1990697/with_amp.xml

知道如何传递带有转义字符的 XML 吗?

它不必依赖于 suds,而是在 python 中。 我正在使用 python 2.6(如果需要,它怎么可能与 2.7 一起使用)

我也在用Django框架,不知道有没有用。


额外信息:

  • 我无权修改 SOAP 服务器
  • 客户支持人员告诉我我的 xml 是正确的并且它们适用于 他们,所以错误是在我的实现中(或在泡沫的某个地方?)

最佳答案

我认为 suds 库是这里的罪魁祸首。当您将转义的 xml 作为 client.service.timbrado 方法的参数发送到 suds 时,它也会对其进行转义。但是,它看到您已经像这样转义了 & 符号:

...
descripcion="EJE&MPLO"
...

它不会进一步逃避它(尽管它应该)。在将转义的 xml 传递给 client.service.timbrado 之前,您应该通过 xml.sax.saxutils.escape 运行转义的 xml。

这应该导致上面的 xml 片段看起来像这样:

...
descripcion="EJE&MPLO"
...

当我使用双重转义的 xml 运行您的代码时,我收到以下结果:

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:timbradoResponse xmlns:ns2="http://sefactura.com">
            <return>
                <status>401 - Fecha y hora de generación fuera de rango</status>
            </return>
        </ns2:timbradoResponse>
    </S:Body>
</S:Envelope>

这是关于您的数据的错误(生成日期和时间超出范围),而不是关于 xml 的格式。

关于python - 使用带有转义字符作为参数的 XML 使用 WSDL url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619328/

相关文章:

node.js - Azure函数: NodeJS - HTTP Response Renders as XML Rather than HTTP Response

Azure API 网关前端的 Django API

python - Spyder 3.3.3帮助输入框问题: can only type 1 character

python - 将逗号小数点分隔符转换为数据框内的点

python - 如何使用 opencv 制作剪切图/使图像背景透明?

c# - 如何统计XML文档中特定节点的子节点?

java - 通过 XML 解析器动态将 ZonedDateTime 字符串映射到 LocalDateTime

ios - 如何连接(GET请求)ios应用程序到django rest框架

Django zinnia 禁用评论或使用替代方案

python - 检查不存在的可选表