2015-04-21 10 views
5

Vorrei inviare un file in una richiesta POST usando la libreria Le richieste di Python, in Python 3. Sto cercando di inviare in questo modo:Come caricare un file di testo utilizzando Python-richieste senza la scrittura su disco

import requests 

file_content = 'This is the text of the file to upload' 

r = requests.post('http://endpoint', 
    params = { 
     'token': 'api_token', 
     'message': 'message text', 
    }, 
    files = {'filename': file_content}, 
) 

Il server risponde che nessun file è stato inviato, tuttavia. Questo dovrebbe funzionare? La maggior parte degli esempi riguarda il passaggio di un oggetto file, ma non voglio dover scrivere la stringa sul disco solo per caricarla.

risposta

1

Si scopre che il motivo per cui non funzionava non aveva nulla a che fare con il contenuto del file, ma piuttosto che stavo inviando la richiesta su HTTP, piuttosto che su HTTPS, che stava perdendo l'intero corpo della richiesta.

4

Perché non utilizzare cStringIO?

import requests, cStringIO 

file_content = 'This is the text of the file to upload' 

r = requests.post('http://endpoint', 
    params = { 
    'token': 'api_token', 
    'message': 'tag_message', 
    }, 
    files = {'filename': cStringIO.StringIO(file_content)}, 
) 

Penso requests utilizza alcuni metodi simili a quelli che usiamo con i file. cStringIO li fornisce.


Esempio di utilizzo

>>> from cStringIO import * 
>>> a=StringIO("hello") 
>>> a.read() 
'hello' 
+1

Grazie per il suggerimento. Dal momento che sto usando Python 3, però, è nel modulo 'io':' io.StringIO' – Dov

4

Il requests docs ci forniscono questo:

Se si desidera, è possibile inviare le stringhe di essere ricevuti sotto forma di file:

>>> url = 'http://httpbin.org/post' 
>>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')} 

>>> r = requests.post(url, files=files) 
>>> r.text 
{ 
    ... 
    "files": { 
    "file": "some,data,to,send\\nanother,row,to,send\\n" 
    }, 
    ... 
} 

L'ho postato come un'altra risposta in quanto comporta un approccio diverso.

+0

Grazie, mi era mancato nei documenti. – Dov

+0

Bello! Grazie, è necessario scrivere alcuni test, cambiando il nome/dati ogni volta. – rprasad

Problemi correlati