2017-08-31 3 views
1

Tel est l'objectif de la demande après que j'ai besoin en python:POST python-requêtes de fichiers de demande

je suis arrivé fichier XML, URL et jeton d'authentification. En fonction du fichier xml, j'obtiens la réponse xml du serveur.

req = requests.post(url='http://abc123.com/index.php/plan/', \  
      headers={'auth-token': 'abCdeFgh'}, \ 
      data={'data': open('sample_plan.xml', 'rb')}) 

demande Publier le code d'état est de 200, mais il y a erreur en réponse xml comme "<error>invalid XML for request</error>". Supposément que le fichier XML est rempli dans le mauvais paramètre dans ma demande de publication. Mais dans un autre outil - Facteur - https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en? cela fonctionne et réussit avec la bonne réponse xml. Ce que j'ai en Postman:

  • en-têtes: clé: Auth-token Valeur: Abcdefgh

  • dans le corps: Option form-data c .. clé: data Valeur: fichier sample_plan.xml choisi ..

Objectif pour les paramètres (tous les paramètres sont obligatoires) de la demande de poste: 1. en-tête - Authentification Token 2. dans le corps - fichier XML avec le nom/contentId = données

Quel paramètre dois-je mettre le fichier de la demande de poste dans? J'ai essayé presque tout - basé sur la documentation de demandes de python ...

Merci pour votre aide!

Répondre

1

D'une manière ou d'une autre après des heures d'essai, je l'ai eu!

Le bon paramètre était des fichiers et il devait y avoir une clé 'data' avec une valeur de tuple avec 3 arguments. Dans le cas contraire, il ne fonctionne pas correctement ...

De la demande de documentation je fichiers paramètres pour le téléchargement d'encodage multipart http://docs.python-requests.org/en/master/api/ avec « données » clé que je suis sollicité par + valeur de 3-tuple (« nom », fileobj, « content_type »)

par conséquent, la réponse à mon problème est (également utilisé « avec » mot-clé pour que le fichier est correctement fermé après sa suite finitions)

with open('sample_plan.xml', 'rb') as payload: 
    headers = {'auth-token': 'abCdeFgh'} 
    files = {'data': ('sample_plan.xml', payload, 'text/xml')} 
    req = requests.post(url='http://abc123.com/index.php/plan/', \ 
      headers=headers, files=files)