在Suds/python中可以替换模式位置吗?
我正在尝试访问一个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])
就这么简单!