Suds错误:httplib中的BadStatusLine

3 投票
3 回答
5027 浏览
提问于 2025-04-17 04:05

我正在使用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)

这个错误是什么意思,我该怎么解决呢?

谢谢!

3 个回答

1

httplib是一个纯Python模块。如果你想了解更多具体信息,可以看看它的代码。
当状态行无法被解析为有效的HTTP/1.0或1.1状态行时,就会出现BadStatusLine错误。
目前还没有解决办法。

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的服务器非常繁忙(链接, 链接)。

SUDS的Client可以设置使用缓存。我实现了一个缓存对象,它返回SUDS访问的两个w3.org网址的内容(你可以在日志输出中找到这些网址)。我用浏览器获取了这两个模式文件并保存到硬盘上,然后把内容作为字符串常量放在源代码文件里。

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模式内容,可以在这里找到。

-2

这意味着服务器那边出现了问题,导致HTTP服务器回复了一些乱七八糟的东西,而不是正常的'HTTP/1.1 200 OK'(或者类似的)信息。这个问题你是没法解决的。

撰写回答