Domanda python richiede il caricamento di file


Sto eseguendo un semplice compito di caricare un file usando la libreria di richieste Python. Ho cercato Stack Overflow e nessuno sembrava avere lo stesso problema, vale a dire che il file non è stato ricevuto dal server:

import requests
url='http://nesssi.cacr.caltech.edu/cgi-bin/getmulticonedb_release2.cgi/post'
files={'files': open('file.txt','rb')}
values={'upload_file' : 'file.txt' , 'DB':'photcat' , 'OUT':'csv' , 'SHORT':'short'}
r=requests.post(url,files=files,data=values)

Sto riempiendo il valore della parola chiave 'upload_file' con il mio nome file, perché se lo lascio vuoto, dice

Error - You must select a file to upload!

E ora ho capito

File  file.txt  of size    bytes is  uploaded successfully!
Query service results:  There were 0 lines.

Che viene visualizzato solo se il file è vuoto. Quindi sono bloccato su come inviare il mio file con successo. So che il file funziona perché se vado in questo sito Web e compilo manualmente il modulo restituisce una bella lista di oggetti abbinati, che è quello che sto cercando. Apprezzerei davvero tutti i suggerimenti

Alcuni altri thread correlati (ma non rispondendo al mio problema):


44
2018-03-21 18:57


origine


risposte:


Se upload_file è pensato per essere il file, usa:

files = {'upload_file': open('file.txt','rb')}
values = {'DB': 'photcat', 'OUT': 'csv', 'SHORT': 'short'}

r = requests.post(url, files=files, data=values)

e requests invierà un corpo POST in più parti con il upload_file campo impostato sul contenuto del file.txt file.

Il nome file sarà incluso nell'intestazione mime per il campo specifico:

>>> import requests
>>> open('file.txt', 'wb')  # create an empty demo file
<_io.BufferedWriter name='file.txt'>
>>> files = {'upload_file': open('file.txt', 'rb')}
>>> print(requests.Request('POST', 'http://example.com', files=files).prepare().body.decode('ascii'))
--c226ce13d09842658ffbd31e0563c6bd
Content-Disposition: form-data; name="upload_file"; filename="file.txt"


--c226ce13d09842658ffbd31e0563c6bd--

Notare la filename="file.txt" parametro.


97
2018-03-21 19:04