我有同样的问题。为了解决这个问题,我打开了完整的泡沫记录:
logging.basicConfig(level=logging.INFO)
logging.getLogger("suds.client").setLevel(logging.DEBUG)
logging.getLogger("suds.transport").setLevel(logging.DEBUG)
logging.getLogger("suds.xsd.schema").setLevel(logging.DEBUG)
logging.getLogger("suds.wsdl").setLevel(logging.DEBUG)
通过调试输出,我注意到当 SUDS 尝试下载http://www.w3.org/2001/xml.xsd时发生了错误(我试图调用的服务以某种方式引用了该特定模式)。事实证明 w3.org 服务器非常过载(链接、链接)。
SUDSClient
可以配置为使用缓存。我实现了一个缓存对象,它返回 SUDS 命中的两个 w3.org URL 的内容(您可以在日志输出中找到这些 URL)。我使用浏览器获取这两个模式并将它们保存到磁盘,然后将内容作为字符串常量放入源代码文件中。
from suds.cache import NoCache
from suds.sax.parser import Parser
class StaticSudsCache(NoCache):
def get(self, id):
STATIC = {"http://www.w3.org/2001/xml.xsd": XML_XSD,
"http://www.w3.org/2001/XMLSchema.xsd": XMLSCHEMA_XSD }
xml_string = STATIC.get(id.name)
if xml_string:
p = Parser()
return p.parse(string=xml_string)
from suds.client import Client
c = Client(service_url, cache=StaticSudsCache())
XML_XSD = """... contents from file ..."""
XMLSCHEMA_XSD = """... contents from file ..."""
包括 XML 模式内容的完整代码在这里。