是否可以替换Suds / python中的模式位置?

时间:2013-02-21 20:07:22

标签: python wcf soap wsdl

我正在尝试点击在反向代理/重定向后面托管的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 个答案:

答案 0 :(得分:2)

事实证明,可以创建plugins。这个很容易:

import re
from suds.plugin import DocumentPlugin

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

然后它被称为la:

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

这就是全部!