skanagasabap
skanagasabap

Reputation: 940

Python requests - POST data from a file

I have used curl to send POST requests with data from files.

I am trying to achieve the same using python requests module. Here is my python script

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

Data file looks like below

'ID' : 'ISM03'

But my script is not POSTing the data from file. Am I missing something here.

In Curl , I used to have a command like below

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

Upvotes: 24

Views: 62879

Answers (1)

Martijn Pieters
Martijn Pieters

Reputation: 1123630

You do not need to use .read() here, simply stream the object directly. You do need to set the Content-Type header explicitly; curl does this when using --data but requests doesn't:

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)

I've used the open file object as a context manager so that it is also auto-closed for you when the block exits (e.g. an exception occurs or requests.post() successfully returns).

Upvotes: 54

Related Questions