在Suds/python中可以替换模式位置吗?

2 投票
1 回答
551 浏览
提问于 2025-04-17 16:40

我正在尝试访问一个WCF服务,这个服务是通过一个反向代理/重定向来托管的。这个WCF服务根据它实际运行的机器,报告了错误的schemaLocation。举个例子,我得到的结果是这样的:

<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://badhost1.com/service.svc?xsd=xsd0" namespace="http://tempuri.org/"/>
<xsd:import schemaLocation="http://badhost1.com/service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
</xsd:schema>
</wsdl:types>

现在,它不应该是http://badhost1.com,而应该是http://goodhost.com。如果我把浏览器指向正确的地址,我可以打开xsd文件——显然,错误的地址是打不开的。

有没有办法把这些错误的地址替换成正确的呢?

1 个回答

2

原来我们可以创建一些插件。这个插件很简单:

import re
from suds.plugin import DocumentPlugin

class FixUrls(DocumentPlugin):
    def loaded(self, context):
        context.document = re.sub(r'badhost\d', 'goodhost', context.document)

然后可以这样调用它:

client = Client(url, plugins=[plugin])

就这么简单!

撰写回答