it-swarm-eu.dev

Strumento da riga di comando di Linux per il caricamento di file su HTTP come multipart / form-data?

Vedo che wget ha un'opzione --post-file, ma la manpage dice "Wget non supporta attualmente multipart/form-data per trasmettere POST data; solo application/x-www-form-urlencoded Dovrebbe essere specificato solo uno tra "--post-data" e "--post-file". "

Esiste un modo simile per caricare file in multipart/form-data?

23
kdt

Usa arricciatura:

curl -F "[email protected];filename=nameinpost" url.com
29
Tobu

È possibile farlo solo con wget. Almeno con la versione 1.13.4 e forse altri. L'opzione --post-file ti consente di specificare un file da inviare, a patto che il file postdata sia costruito correttamente.

Ho anche provato questo con i file binari e funziona come previsto. NON è necessario codificare in base64 il file, ma è necessario assicurarsi che il file non contenga il limite.

Il comando minimo richiesto per fare questo lavoro sarebbe:

wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform

e il file postdata dovrebbe contenere qualcosa come:

--FILEUPLOAD
Content-Disposition: form-data; name="comment"

I love uploading files!

--FILEUPLOAD
Content-Disposition: form-data; name="uploadFile"; filename="myfile.bin"; 
Content-Type: application/octet-stream
Media Type: application/octet-stream

Give me some automated file upload action!

--FILEUPLOAD--

Un certo numero di dettagli sono importanti qui:

  1. Le righe nel file di dati del post sono terminate con\r\n. L'unica eccezione sono i dati all'interno del contesto del file.
  2. Ogni attributo BOUNDARY nei postdata deve corrispondere al valore BOUNDARY nella chiamata a wget. (FILEUPLOAD nell'esempio)
  3. Tutti i limiti sono preceduti da due trattini "-" e terminati con\r\n
  4. L'ultimo limite è suffisso con due trattini aggiuntivi "-" e terminato con\r\n
  5. Ogni parte di dati, contenuto di file o valore di parametro, è circondata da una riga vuota "\ r\n"

Ho pensato che questo potesse aiutare qualcuno dal momento che alcuni ambienti controllati hanno wget ma non si arricciano.

16
tudor