【问题标题】:How do I prevent suds from fetching xml.xsd over the network?如何防止 suds 通过网络获取 xml.xsd?
【发布时间】:2011-09-21 13:23:46
【问题描述】:

我正在使用 Python 的 suds 库,它试图通过网络获取 xml.xsd。不幸的是,w3c 服务器由于像我这样的其他程序而受到重创,通常无法提供文档。

如何拦截 suds 的 URL 获取以始终获取此文件的本地副本,即使无需第一次成功将其下载到长期缓存中?

【问题讨论】:

    标签: python soap suds


    【解决方案1】:

    获取 xml.xsd 的问题与大多数 WSDL 所需的“http://www.w3.org/XML/1998/namespace”命名空间有关。这个命名空间默认映射到http://www.w3.org/2001/xml.xsd。

    您可以覆盖此命名空间的位置绑定以指向本地文件:

    from suds.xsd.sxbasic import Import
    
    file_url = 'file://<path to xml.xsd>'
    Import.bind('http://www.w3.org/XML/1998/namespace', file_url)
    

    【讨论】:

      【解决方案2】:

      suds 库有一个 suds.store.DocumentStore 类,它将捆绑的 XML 保存在 uri -> 文本字典中。可以这样打补丁:

      suds.store.DocumentStore.store['www.w3.org/2001/xml.xsd'] = \
          file('xml.xsd', 'r').read()
      

      不幸的是,这不起作用,因为DocumentStore 只接受suds:// 协议的请求。一个猴子补丁之后,你就开始做生意了。

      也可以覆盖传递给您的 suds Client() 的 Cache() 实例,但缓存处理基于 Python 的 hash() 的数字 id,并且不会获取其内容的 URL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-03
        • 2021-01-17
        • 2018-03-08
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多