我正在尝试点击在反向代理/重定向后面托管的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 - 显然坏主机不起作用。
有没有办法用正确的端点替换这些坏端点?
答案 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])
这就是全部!