2012-08-06 11 views
16

Sto provando a riscrivere un vecchio codice Python con modulo richieste. Lo scopo è caricare un allegato. Il server di posta richiede le seguenti specifiche:Come specificare le richieste Python http put body?

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

vecchio codice che funziona:

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

Non hai trovato come utilizzare la parte del corpo nelle richieste.

sono riuscito a fare quanto segue:

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

ma non hanno idea di come specificare la parte del corpo con il contenuto del file.

Grazie per il vostro aiuto. Omer.

risposta

37

Citando le docs

dati - (opzionale) dizionario o byte di inviare nel corpo della richiesta .

Quindi questo dovrebbe lavoro (non testato):

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

Grazie mille !!!! –

0

ho avuto questa cosa ha funzionato utilizzando Python e il modulo di richiesta. Con questo possiamo fornire un contenuto di file come valore di input della pagina. Vedi il codice sottostante,

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

Sentitevi liberi di chiedere se avete qualche dubbio.