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.
So yes, a PUT request, technically, strictly, has to have a body.
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.
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} )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With