2009-10-23 2 views
0

Les en-têtes sont bien affichés, mais le XML associé semble être considéré comme des données de chaîne seulement, le XML n'est pas traité. chaîne XML est de la forme:Python POST XML non exécuté

params = '''<?xml version="1.0" encoding"="UTF-8 "?> 
<MainRequest> 
<requestEnvelope><errorLanguage>en_US</errorLanguage> 
</requestEnvelope></MainRequest>''' 

Le POST est de la forme:

enc_params = urllib.quote(params) 
request = urllib2.Request("https://myURL/",enc_params, headers) 

L'envoi du XML est de la forme:

%3C%3Fxml%20version%3D%221.0%22%20encoding%22%3D%22UTF-8%20%22%3F%3E%0A%3CMainReq 
uest%3E%0A%3CrequestEnvelope%3E%3CerrorLanguage%3Een_US%3C/errorLanguage%3E%0A%3 
C/requestEnvelope%3E 

Le message d'erreur, indique que le contenu XML est manquant.

Des idées seraient utiles.

+0

XML ** Est ** "données de chaîne". Avez-vous accès au côté serveur? Pouvez-vous examiner les journaux? Je remarque également une erreur de syntaxe dans votre instruction de traitement à 'encoding" = "UTF-8" ' –

Répondre

2

Ajoutez-vous un en-tête de type de contenu? Pour indiquer au serveur de votre demande est XML, ajoutez ce qui suit avant d'envoyer la demande:

request.add_header('Content-Type', 'text/xml') 
+0

Merci beaucoup, le 'encoding', la suppression de l'entête 'urllib.quote' et 'Content-Type' J'ai travaillé sur les commentaires Python/XML. –

0

Sortez l'appel « urllib.quote() ». C'est ce qui a créé la chaîne qui commence "% 3C% 3Fxml". Si vous voulez POST XML alors envoyez simplement cette chaîne XML comme données, avec le Content-Type qu'ataylor a mentionné. (Mais dans la plupart des cas cela ne fait pas de différence.)