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.