Suds错误:httplib中的BadStatusLine

时间:2011-10-11 11:58:37

标签: python soap suds httplib

我正在使用肥皂泡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 个答案:

答案 0 :(得分:8)

我遇到了同样的问题。为解决这个问题,我打开了完整的suds日志记录:

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服务器非常重载(linklink)。

可以将SUDS Client配置为使用缓存。我实现了一个缓存对象,它返回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架构内容的完整代码为here

答案 1 :(得分:1)

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

答案 2 :(得分:-2)

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