Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to specify python requests http put body?

I'm trying to rewrite some old python code with requests module. The purpose is to upload an attachment. The mail server requires the following specification :

https://api.elasticemail.com/attachments/upload?username=yourusername&api_key=yourapikey&file=yourfilename 

Old code which works:

h = httplib2.Http()                 resp, content = h.request('https://api.elasticemail.com/attachments/upload?username=omer&api_key=b01ad0ce&file=tmp.txt',          "PUT", body=file(filepath).read(),          headers={'content-type':'text/plain'} ) 

Didn't find how to use the body part in requests.

I managed to do the following:

 response = requests.put('https://api.elasticemail.com/attachments/upload',                     data={"file":filepath},                                               auth=('omer', 'b01ad0ce')                                        ) 

But have no idea how to specify the body part with the content of the file.

Thanks for your help. Omer.

like image 654
omer bach Avatar asked Aug 06 '12 16:08

omer bach


People also ask

Can we send request body PUT request?

So yes, a PUT request, technically, strictly, has to have a body.

What is put request in Python?

The PUT method requests that the enclosed entity be stored under the supplied URI. If the URI refers to an already existing resource, it is modified and if the URI does not point to an existing resource, then the server can create the resource with that URI.


1 Answers

Quoting from the docs

data – (optional) Dictionary or bytes to send in the body of the Request.

So this should work (not tested):

 filepath = 'yourfilename.txt'  with open(filepath) as fh:      mydata = fh.read()      response = requests.put('https://api.elasticemail.com/attachments/upload',                 data=mydata,                                          auth=('omer', 'b01ad0ce'),                 headers={'content-type':'text/plain'},                 params={'file': filepath}                  ) 
like image 193
raben Avatar answered Sep 19 '22 05:09

raben