curl -GET e -X GET


126

Curl offre una serie di chiamate di metodi http differenti che sono precedute da una X, ma offre anche gli stessi metodi senza. Ho provato entrambi e non riesco a capire la differenza. Qualcuno può spiegarmi velocemente come differiscono queste due operazioni?

Risposte:


263

Per impostazione predefinita, usi curl senza dire esplicitamente quale metodo di richiesta usare. Se si passa solo un URL HTTP come curl http://example.comquesto, verrà utilizzato GET. Se usi -do -Fcurl userai POST, -Icauserà un HEAD e -Tlo renderà un PUT.

Se per qualsiasi motivo non sei soddisfatto di queste scelte predefinite che curl fa per te, puoi sovrascrivere quei metodi di richiesta specificando -X [WHATEVER]. In questo modo puoi ad esempio inviare un DELETE facendo curl -X DELETE [URL].

Non ha quindi senso fare curl -X GET [URL]come sarebbe comunque utilizzato GET. Allo stesso modo è inutile, curl -X POST -d data [URL]...ma puoi fare una richiesta divertente e un po 'rara che invia un corpo della richiesta in una richiesta GET con qualcosa di simile curl -X GET -d data [URL].

Scavando più a fondo

curl -GET(usando un solo trattino) è semplicemente sbagliato per questo scopo. È l'equivalente di specificare le opzioni -G, -Ee -Te questo farà qualcosa di completamente diverso.

C'è anche un'opzione curl chiamata --getper non confondere le cose con nessuno dei due. È la forma lunga di -G, che viene utilizzata per convertire i dati specificati con -din una richiesta GET invece che in un POST.

(Successivamente ho usato la mia risposta qui per popolare le FAQ di curl per coprire questo .)

Avvertenze

Le versioni moderne di curl informeranno gli utenti su questo uso non necessario e potenzialmente dannoso di -X quando la modalità dettagliata è abilitata ( -v) - per rendere gli utenti consapevoli. Spiegato ulteriormente e motivato in questo post del blog .

-G converte un corpo POST + in una query GET +

Puoi chiedere a curl di convertire un insieme di -dopzioni e invece di inviarle nel corpo della richiesta con POST, metterle alla fine della stringa di query dell'URL ed emettere un GET, con l'uso di `-G. Come questo:

curl -d name=daniel -d grumpy=yes -G https://example.com/

5
-XGET potrebbe non essere operativo, ma lo rende esplicito.
mtyson

"Per impostazione predefinita, utilizzi curl senza indicare esplicitamente quale metodo di richiesta utilizzare. Se passi un URL HTTP come curl example.com , verrà utilizzato GET. Se utilizzi -d o -F curl utilizzerà POST, -I causerà a HEAD e -T lo renderanno un PUT. " Tutto quello che devi sapere.
Donato

4
Esplicito è meglio che implicito ogni volta che ne hai la possibilità. Fail in anticipo, fail fast, riduce gli incidenti, riduce i tempi di debug. L'unica volta che hai una scusa per saltarlo è quando lo digiti nella riga di comando. Qualsiasi script dovrebbe specificare -XGET anche quando strettamente non necessario.
Backgammon

1
@Backgammon se lo fanno, lo stanno facendo male. Ma certo che possono.
Daniel Stenberg

2

-X [il tuo metodo]
X ti consente di sovrascrivere l'impostazione predefinita "Ottieni"

** corretto da minuscolo xa maiuscoloX


2
Questo non cerca nemmeno di rispondere alla domanda "come differiscono queste due operazioni".
Melebius

1

L'uso di -X [WHATEVER]cambia semplicemente la stringa del metodo della richiesta utilizzata nella richiesta HTTP. Questo è più facile da capire con due esempi, uno con -X [WHATEVER]e uno senza, e le intestazioni delle richieste HTTP associate per ciascuno:

# curl -XPANTS -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.224.86.126) port 80 (#0)
> PANTS / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*

# curl -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.33.50.167) port 80 (#0)
> GET / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*
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.