Python 如何防止sud通过网络获取xml.xsd?

Python 如何防止sud通过网络获取xml.xsd?,python,soap,suds,Python,Soap,Suds,我正在使用Python的suds库,它试图通过网络获取xml.xsd。不幸的是,w3c服务器由于像我这样的其他程序而遭受重创,通常无法提供文档 如何拦截suds的URL抓取以始终抓取此文件的本地副本,即使不必第一次将其成功下载到长期缓存中?suds库有一个类suds.store.DocumentStore,它在uri->文本字典中保存捆绑的XML。它可以这样修补: suds.store.DocumentStore.store['www.w3.org/2001/xml.xsd'] = \

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


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

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

suds.store.DocumentStore.store['www.w3.org/2001/xml.xsd'] = \
    file('xml.xsd', 'r').read()
不幸的是,这不起作用,因为
DocumentStore
只接受
suds://
协议的请求。一个猴子补丁之后,你就开始做生意了


也可以覆盖传递给sud的
缓存()
实例
客户端()
,但是缓存处理基于Python的
哈希()
的数字ID,并且不获取其内容的URL。

获取xml.xsd的问题与“http://www.w3.org/XML/1998/namespace“名称空间,这是大多数WSDL所必需的。默认情况下,此命名空间映射到

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

from suds.xsd.sxbasic import Import

file_url = 'file://<path to xml.xsd>'
Import.bind('http://www.w3.org/XML/1998/namespace', file_url)
从suds.xsd.sxbasic导入
file_url='文件://'
Import.bind('http://www.w3.org/XML/1998/namespace,文件(url)