3

我正在使用 suds 0.3.6。创建 suds 客户端时,我随机收到错误消息:

httplib.py,_read_status(),第 355 行,类 httplib.BadStatusLine'

这是用于创建客户端的代码:

imp = Import('http://www.w3.org/2001/XMLSchema')
imp.filter.add('http://tempuri.org/encodedTypes')
imp.filter.add('http://tempuri.org/')
self.doctor = ImportDoctor(imp)

self.client = Client(self.URL,doctor=self.doctor)

这个错误是什么意思,我该如何解决?

谢谢!

4

3 回答 3

8

我有同样的问题。为了解决这个问题,我打开了完整的泡沫记录:

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 模式内容的完整代码在这里

于 2011-12-19T13:59:30.290 回答
1

httplib 是一个纯 python 模块。您可以查看代码以获取更精确的信息...如果状态行无法解析为有效的 HTTP/1.0 或 1.1 状态行,则会引发 BadStatusLine。暂时没有解决办法

于 2011-10-11T12:28:26.710 回答
-2

这意味着服务器端存在问题,导致 HTTP 服务器回复一些垃圾而不是普通的“HTTP/1.1 200 OK”(或类似)行。你无法解决这个问题。

于 2011-10-11T12:14:51.303 回答