Ошибка Suds: BadStatusLine в httplib - PullRequest
3 голосов
/ 11 октября 2011

Я использую 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 ]

8 голосов
/ 19 декабря 2011

У меня была такая же проблема.Чтобы устранить эту проблему, я включил полное журналирование 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 очень перегружен ( ссылка , ссылка ).

SUDS Client можно настроить на использование кэша.Я реализовал объект кеша, который возвращает содержимое двух URL-адресов w3.org, по которым работал SUDS (вы можете найти 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, здесь .

1 голос
/ 11 октября 2011

httplib - это чистый модуль Python. Вы можете посмотреть код для более точной информации ... BadStatusLine вызывается, если строка состояния не может быть проанализирована как действительная строка состояния HTTP / 1.0 или 1.1. На данный момент нет решения

0 голосов
/ 11 октября 2011

Это означает, что на стороне сервера существует проблема, из-за которой HTTP-сервер отвечает некачественной строкой вместо обычной строки «HTTP / 1.1 200 OK» (или аналогичной). Вы не можете это исправить.

...