pythonhttpputhttplib2python-requests

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.


Solution

  • 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}
                     )