【问题标题】:Is it possible to replace schema locations in Suds/python?是否可以替换 Suds/python 中的模式位置?
【发布时间】:2013-02-21 20:07:21
【问题描述】:

我正在尝试访问在反向代理/重定向后面托管的 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 指向 goodhost 版本,我可以在浏览器中打开它 - 显然 badhost 版本不起作用。

有没有办法用正确的端点替换这些坏端点?

【问题讨论】:

  • 不久前我以一种骇人听闻的方式做到了这一点。我有一个代理脚本,可以读取本地 wsdl 文件并根据查询字符串替换 url。我也想看看更优雅的东西。
  • @jordanm,我想做同样的事情,比如使用 Flask。事实证明它更容易 - 看看我的自我回答!

标签: python wcf soap wsdl


【解决方案1】:

原来可以创建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])

仅此而已!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2011-12-27
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多