Error de Suds: BadStatusLine en httplib

Estoy usando espuma 0.3.6. Al crear un cliente de suds, recibo un error al azar:

httplib.py, _read_status (), línea 355, clase httplib.BadStatusLine ‘

Aquí está el código utilizado para crear el cliente:

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) 

¿Qué significa este error y cómo puedo solucionarlo?

¡Gracias!

Eso significa que hay un problema en el lado del servidor que hace que el servidor HTTP responda con algo de correo no deseado en lugar de una línea ‘HTTP / 1.1 200 OK’ (o similar) ordinaria. No puedes arreglar eso.

Yo tuve el mismo problema. Para solucionar el problema, activé el registro completo de las 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) 

Con el resultado de la depuración, noté que se produjo un error cuando SUDS intentó descargar http://www.w3.org/2001/xml.xsd (el servicio al que estaba tratando de llamar hacía referencia a ese esquema en particular). Resulta que el servidor w3.org está muy sobrecargado ( enlace , enlace ).

El Client SUDS puede configurarse para usar un caché. Implementé un objeto de caché que devuelve el contenido de dos URL de w3.org que SUDS estaba golpeando (puede encontrar las URL en la salida del registro). Utilicé un navegador para obtener los dos esquemas y guardarlos en el disco y luego poner el contenido como una cadena dentro de un archivo de código fuente.

 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 ...""" 

El código completo que incluye el contenido del esquema XML está aquí .

httplib es un módulo de python puro … puede consultar el código para obtener información más precisa … BadStatusLine aparece si la línea de estado no se puede analizar como una línea de estado HTTP / 1.0 o 1.1 válida. No hay solución a partir de ahora