Generatore di Comandi curl
Costruisci un comando curl reale e funzionante a partire da metodo HTTP, URL, header, corpo e opzioni di autenticazione — con il corretto escaping della shell applicato automaticamente — e copialo con un clic.
233 visualizzazioni
Breve storia di curl
curl fu creato nel 1998 dallo sviluppatore svedese Daniel Stenberg, che ne scrisse la prima versione per recuperare automaticamente i tassi di cambio delle valute per un bot IRC su un canale di chat svedese — un piccolo bisogno personale, non un grande piano per costruire un'infrastruttura. Le persone continuarono a chiedere più protocolli e più opzioni, e quella piccola utility si trasformò in uno strumento a riga di comando general-purpose per trasferire dati via HTTP, HTTPS, FTP e, col tempo, decine di altri protocolli. Stenberg è rimasto il manutentore principale di curl per praticamente tutta la sua esistenza; oggi curl è preinstallato di default su macOS, su praticamente ogni distribuzione Linux e — dal 2018 — su Windows 10 e versioni successive, e si stima che giri su miliardi di dispositivi in tutto il mondo, dai router alle automobili, dalle console di gioco a quasi ogni pipeline di integrazione continua che comunica con un'API. Ciò che è iniziato come la soluzione a un problema personale molto circoscritto è oggi, probabilmente, il client HTTP a riga di comando più diffuso in assoluto, e uno dei software open source di cui internet dipende più silenziosamente.
Come interpretare i flag generati da questo strumento
Per impostazione predefinita, curl non segue i redirect HTTP. Se un server risponde con uno stato 301 o 302 e un header Location che punta altrove, curl senza opzioni aggiuntive stampa quella risposta di redirect — o un corpo vuoto — e si ferma; non insegue automaticamente il nuovo URL come fa silenziosamente un browser web. Questo confonde un numero enorme di utenti alle prime armi con curl: un URL che funziona perfettamente in un browser restituisce una risposta confusa, vuota o sbagliata da curl, apparentemente senza motivo, semplicemente perché il browser ha seguito un redirect che curl non ha seguito. La soluzione è il flag -L (--location), che dice a curl di seguire la catena di redirect fino alla destinazione finale. È un'esigenza così comune che molti sviluppatori usano -L di default ogni volta che non stanno deliberatamente testando il comportamento dei redirect in sé.
Non appena un comando include header o contenuti del corpo con spazi, virgolette o caratteri speciali della shell ($, &, ;, apici inversi), il modo in cui li racchiudi tra virgolette smette di essere una questione estetica — diventa la differenza tra una richiesta che funziona e una che la shell corrompe prima ancora che curl la veda. Un header come Authorization: Bearer abc 123 digitato senza virgolette viene diviso dalla shell in corrispondenza dello spazio, quindi curl riceve Authorization: e Bearer come due argomenti separati e rotti invece di uno solo. Racchiudere l'intero valore tra apici singoli dice alla shell di trattare tutto ciò che è all'interno alla lettera, spazi inclusi — ma gli apici singoli non possono contenere al loro interno un apice singolo letterale, dato che è proprio quel carattere a chiudere la citazione. La soluzione standard per questo caso è chiudere la citazione, inserire un apice singolo preceduto da backslash e riaprire la citazione: '\''. Questo strumento applica automaticamente questa sequenza di escape a ogni valore che inserisce, così header, contenuto del corpo e credenziali di autenticazione che contengono spazi, virgolette o altri caratteri speciali producono sempre un comando che funziona correttamente — senza che tu debba memorizzare le regole di escape.
Domande Frequenti
Perché mi serve il flag -L per alcuni comandi curl?
curl non segue i redirect HTTP per impostazione predefinita. Se il server che stai chiamando risponde con uno stato 301 o 302 e un header Location, curl senza opzioni ti mostra quella risposta di redirect invece del contenuto finale e si ferma lì. I browser seguono i redirect silenziosamente, ed è per questo che un URL che "funziona nel browser" può restituire una risposta vuota o inattesa da curl. Aggiungere -L (--location) dice a curl di seguire automaticamente la catena di redirect fino a raggiungere la destinazione finale.
Perché il mio comando curl fallisce quando un header contiene uno spazio?
È la shell — non curl — a dividere una riga di comando in argomenti separati, e per impostazione predefinita lo fa in corrispondenza degli spazi non racchiusi tra virgolette. Un valore di header come Bearer abc123 digitato senza virgolette diventa due parole distinte che la shell passa a curl come se fossero due argomenti diversi, rompendo l'header. Racchiudere il valore tra apici singoli dice alla shell "tratta tutto ciò che è dentro come un unico pezzo letterale, spazi inclusi" — esattamente ciò che questo strumento fa automaticamente per ogni campo che compili.
Qual è la differenza tra la modalità JSON e la modalità Raw per il corpo della richiesta?
La modalità JSON aggiunge automaticamente un header Content-Type: application/json insieme al tuo corpo, dicendo al server di interpretare i dati come JSON — la maggior parte delle API moderne richiede che questo header sia presente, altrimenti rifiuta o interpreta male la richiesta. La modalità Raw invia esattamente il testo che hai digitato senza assumere alcun tipo di contenuto, ed è la scelta corretta per dati con codifica a modulo, testo semplice, XML o qualsiasi corpo per cui vuoi impostare manualmente il tuo header Content-Type nella sezione degli header.
L'autenticazione con Bearer token è la stessa cosa dell'autenticazione Basic?
No, funzionano in modo diverso. L'autenticazione Bearer invia un header Authorization: Bearer <token> che trasporta un token di accesso opaco, tipicamente rilasciato da un flusso OAuth o da un sistema di chiavi API — il server cerca il token invece di decodificarlo. L'autenticazione Basic invia Authorization: Basic <base64(nomeutente:password)>, che è semplicemente il tuo nome utente e la tua password uniti e codificati in base64 — la codifica non è crittografia, quindi l'autenticazione Basic va usata esclusivamente su HTTPS, mai su HTTP semplice, altrimenti le credenziali vengono di fatto inviate in chiaro.
Chi ha creato curl, ed è ancora sviluppato attivamente?
curl fu creato nel 1998 da Daniel Stenberg, originariamente per recuperare i tassi di cambio delle valute per un bot IRC. Stenberg è rimasto il suo manutentore principale per praticamente tutta la storia di curl e continua a svilupparlo attivamente ancora oggi. Lungi dall'essere un progetto amatoriale, curl è oggi uno dei software più diffusi al mondo — incluso in sistemi operativi, dispositivi embedded e innumerevoli applicazioni — e la sua sicurezza e correttezza vengono prese altrettanto sul serio da un'ampia comunità di collaboratori.
Strumenti Simili
Segnala un Problema
Generatore di Comandi curl
Commenti
Ancora nessun commento — scrivi il primo!