使用Python和suds 0.4时出现SAXParseException?

6 投票
1 回答
7641 浏览
提问于 2025-04-16 12:46

我有一个简单的Python脚本,它使用Suds从一个SOAP网络服务中获取数据。在一台机器上运行得很好,但当我把它移到另一台安装了旧版本Python(2.4.3)的机器上时,就出现了以下错误信息:

>>> client = suds.client.Client(url, username='xxx', password='xxx', location=service_location, cache=None)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/home/etlsmart/lib/python2.4/site-packages/suds/client.py", line 112, in __init__
    self.wsdl = reader.open(url)
File "build/bdist.linux-i686/egg/suds/reader.py", line 152, in open
File "build/bdist.linux-i686/egg/suds/wsdl.py", line 136, in __init__
File "build/bdist.linux-i686/egg/suds/reader.py", line 79, in open
File "build/bdist.linux-i686/egg/suds/reader.py", line 101, in download
File "/home/etlsmart/lib/python2.4/site-packages/suds/sax/parser.py", line 136, in parse
    sax.parse(source)
File "/usr/lib/python2.4/site-packages/_xmlplus/sax/expatreader.py", line 109, in parse
    xmlreader.IncrementalParser.parse(self, source)
File "/usr/lib/python2.4/site-packages/_xmlplus/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
File "/usr/lib/python2.4/site-packages/_xmlplus/sax/expatreader.py", line 220, in feed
    self._err_handler.fatalError(exc)
File "/usr/lib/python2.4/site-packages/_xmlplus/sax/handler.py", line 38, in fatalError
    raise exception
xml.sax._exceptions.SAXParseException: <unknown>:18:2: mismatched tag

我查看了各种与缓存相关的错误,但似乎这不是问题所在。我已经禁用了缓存,而且/tmp/suds目录里只包含一个版本文件。

这可能和Python的版本有关吗,还是说我应该尝试其他明显的解决办法?

1 个回答

7

我也遇到过同样的问题。服务器返回的是HTML,而不是SOAP。

这个接口返回的是一个HTML错误信息,而不是SOAP的XML格式。出于某种原因,SUDS会说“我无法解析这个。救命!”而不是“我无法解析这个答案:< 这里是答案 >”,即使在DEBUG日志级别下也是如此。

我发现通过调试工具查看suds.reader时,可以找到一些线索:

/usr/lib/python2.6/site-packages/suds/reader.py in download(self, url)
    100         content = ctx.document
    101         sax = Parser()
--> 102         return sax.parse(string=content)
    103 
    104     def cache(self):

看看content,确认它是不是SOAP的XML格式。

祝你好运。

撰写回答