Come inviare il contenuto del file come entità del corpo usando cURL


207

Sto usando l'utilità da riga di comando cURL per inviare HTTP POST a un servizio web. Voglio includere il contenuto di un file come entità corporea del POST. Ho provato a utilizzare -d </path/to/filename>così come altre varianti con informazioni sul tipo come --data </path/to/filename> --data-urlencode </path/to/filename>ecc ... il file è sempre allegato. Ne ho bisogno come entità del corpo.

Risposte:


338

Credo che tu stia cercando la @filenamesintassi, ad esempio:

spoglia nuove linee

curl --data "@/path/to/filename" http://...

mantenere nuove linee

curl --data-binary "@/path/to/filename" http://...

=====

il ricciolo rimuoverà tutte le nuove righe dal file. Se si desidera inviare il file con le nuove righe intatte, utilizzare --data-binaryal posto di --data


21
Se vuoi essere davvero fantasioso puoi farlo: cat file.txt | curl --data "@-" `(< url.txt )` @-dice al ricciolo di leggere dallo stdin. Puoi anche usare il reindirizzamento (< x.txt )per inserire quello che vuoi. Se stai usando bash.
— Breedly,

62
il ricciolo rimuoverà tutte le nuove righe dal file. Se si desidera inviare il file con le nuove righe intatte, utilizzare --data-binaryal posto di --data.
— Chris,

ora come si aggiungerebbero le credenziali di accesso per autorizzare questa richiesta?
— anon58192932

@ anon58192932 - Dipende dal protocollo di sicurezza del server. Se si utilizzano name:valuecoppie, come un nome utente e una password, quindi aggiungere le intestazioni necessarie che corrispondono a ciò che il servizio si aspetta: --header: "<header_name>:<header_value>"come singola stringa.
— Roy Hinkley,

19

So che alla domanda è stata data una risposta, ma nel mio caso stavo cercando di inviare il contenuto di un file di testo all'API di Slack Webhook e per qualche motivo la risposta sopra non ha funzionato. Comunque, questo è quello che alla fine ha fatto il trucco per me:

curl -X POST -H --silent --data-urlencode "payload={\"text\": \"$(cat file.txt | sed "s/\"/'/g")\"}" https://hooks.slack.com/services/XXX

Questo non converte i punti in caratteri di sottolineatura (. -> _) e mantiene le nuove linee. Grazie!
— Ramon Fincken,

1
È interessante, ma non risponde alla domanda poiché il file viene esploso dalla riga di comando anziché essere specificato per l'arricciatura. Mi chiedo anche se tutti i personaggi speciali della shell debbano essere salvati, ma non ne so abbastanza;)
— Gerard ONeill,

Grazie, mi hai salvato la vita!
— Aryswisnu,

Per un enorme file di contenuto, sopra l'arricciatura non funzionerà, curl: argument list too longin tal caso la risposta accettata è salvavitacurl --data "@/path/to/filename" http://...
— Un altro programmatore

0

Nel mio caso, @causato una sorta di problema di codifica, preferisco ancora il mio vecchio modo:

curl -d "$(cat /path/to/file)" https://example.com
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.