web-dev-qa-db-fra.com

Python requêtes - POST données d'un fichier

J'ai utilisé curl pour envoyer des requêtes POST avec les données des fichiers.

J'essaye d'obtenir la même chose en utilisant python module de requêtes. Voici mon script python

import requests
payload=open('data','rb').read()
r = requests.post('https://IP_ADDRESS/rest/rest/2', auth=('userid', 'password'), data=payload , verify=False)
print r.text

Le fichier de données ressemble à ci-dessous

'ID' : 'ISM03'

Mais mon script ne poste pas les données du fichier. Est-ce que j'ai râté quelque chose.

En Curl, j'avais l'habitude d'avoir une commande comme ci-dessous

Curl --data @filename -ik -X POST 'https://IP_ADDRESS/rest/rest/2' 
19
user2190101

Vous n'avez pas besoin d'utiliser .read() ici, il vous suffit de diffuser directement l'objet. Vous devez définir explicitement l'en-tête Content-Type; curl le fait lors de l'utilisation de --data mais requests ne le fait pas:

with open('data','rb') as payload:
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    r = requests.post('https://IP_ADDRESS/rest/rest/2', auth=('userid', 'password'),
                      data=payload, verify=False, headers=headers)

J'ai utilisé l'objet fichier ouvert comme gestionnaire de contexte afin qu'il soit également fermé automatiquement lorsque le bloc se termine (par exemple, une exception se produit ou requests.post() revient avec succès).

35
Martijn Pieters