J'utilise la mousse 0.3.6. Lors de la création d'un client de mousse, j'obtiens au hasard une erreur:

Httplib.py, _read_status (), ligne 355, classe httplib.BadStatusLine '

Voici le code utilisé pour créer le client:

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)

Que signifie cette erreur et comment puis-je la corriger?

Merci!

3
Becky Williams 11 oct. 2011 à 15:58

3 réponses

Meilleure réponse

Cela signifie qu'il y a un problème côté serveur qui amène le serveur HTTP à répondre avec des ordures au lieu d'une ligne ordinaire 'HTTP / 1.1 200 OK' (ou similaire). Tu ne peux pas arranger ça.

-2
pyos 11 oct. 2011 à 12:14

Httplib est un module pur python .. vous pouvez consulter le code pour des informations plus précises ... BadStatusLine est levée si la ligne d'état ne peut pas être analysée comme une ligne d'état HTTP / 1.0 ou 1.1 valide. Pas de solution pour l'instant

1
avasal 11 oct. 2011 à 12:28

J'ai eu le même problème. Pour résoudre le problème, j'ai activé la journalisation complète de la mousse:

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)

Avec la sortie de débogage, j'ai remarqué que l'erreur s'est produite lorsque SUDS a essayé de télécharger http://www.w3.org/2001/ xml.xsd (ce schéma particulier était en quelque sorte référencé par le service que j'essayais d'appeler). Il s'avère que le serveur w3.org est très surchargé (lien, lien).

Le SUDS Client peut être configuré pour utiliser un cache. J'ai implémenté un objet cache qui retourne le contenu de deux URL w3.org que SUDS frappait (vous pouvez trouver les URL dans la sortie du journal). J'ai utilisé un navigateur pour récupérer les deux schémas et les enregistrer sur le disque, puis mettre le contenu sous forme de chaînes dans un fichier de code source.

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

Le code complet, y compris le contenu du schéma XML, est ici.

8
codeape 22 déc. 2011 à 17:29