2012-08-06 19 views
16

Estoy tratando de reescribir algún viejo código python con el módulo de solicitudes. El propósito es cargar un archivo adjunto. El servidor de correo requiere la siguiente especificación:Cómo especificar las solicitudes de python http put body?

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 se encontró cómo utilizar la parte del cuerpo en las solicitudes.

he conseguido hacer lo siguiente:

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

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

Gracias por su ayuda. Omer.

Respuesta

37

Citando de los docs

datos - (opcional) diccionario o bytes que se envían en el cuerpo de la solicitud .

Así que esto debe trabajo (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} 
       ) 
+0

¡Muchas gracias! –

0

Tengo esta cosa funcionaba usando Python y de solicitud de módulo. Con esto podemos proporcionar un contenido de archivo como valor de entrada de página. Vea el código a continuación,

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, auth=('Username', 'Password')) 

print (res.status_code) 
print (res.raise_for_status()) 

No dude en preguntar si tiene alguna duda.

Cuestiones relacionadas