¿Cómo especificar las peticiones de python http put body?

Estoy tratando de volver a escribir un código Python antiguo con el módulo de solicitudes. El propósito es subir un archivo adjunto. El servidor de correo requiere la siguiente especificación:

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

Código antiguo que funciona:

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

No encontré cómo usar la parte del cuerpo en las solicitudes.

Me las arreglé para hacer lo siguiente:

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

Pero no tengo idea de cómo especificar la parte del cuerpo con el contenido del archivo.

Gracias por tu ayuda. Omer.

Citando de los documentos

Datos : (opcional) Diccionario o bytes para enviar en el cuerpo de la Solicitud .

Así que esto debería funcionar (no probado):

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

Conseguí esto funcionó usando Python y su módulo de solicitud. Con esto podemos proporcionar un contenido de archivo como valor de entrada de la página. Ver codigo abajo,

 import json import requests url = 'https://Client.atlassian.net/wiki/rest/api/content/87440' headers = {'Content-Type': "application/json", 'Accept': "application/json"} f = open("file.html", "r") html = f.read() data={} data['id'] = "87440" data['type']="page" data['title']="Data Page" data['space']={"key":"AB"} data['body'] = {"storage":{"representation":"storage"}} data['version']={"number":4} print(data) data['body']['storage']['value'] = html print(data) res = requests.put(url, json=data, headers=headers, auth=('Username', 'Password')) print(res.status_code) print(res.raise_for_status()) 

No dude en preguntar si tiene alguna duda.


NB : En este caso, el cuerpo de la solicitud se pasa al json kwarg.