curl -GET i -X GET

126

Curl oferuje szereg różnych wywołań metod http, które są poprzedzone znakiem X, ale oferuje również te same metody bez. Próbowałem obu i nie potrafię zrozumieć różnicy. Czy ktoś może mi szybko wyjaśnić, czym różnią się te dwie operacje?

matsko
źródło

Odpowiedzi:

263

Domyślnie używasz curl bez wyraźnego określenia, której metody żądania użyć. Jeśli po prostu przekażesz adres URL HTTP, taki jak curl http://example.comon, użyje GET. Jeśli użyjesz -dlub -Fcurl użyje POST, -Ispowoduje HEAD i -Tsprawi, że będzie to PUT.

Jeśli z jakiegoś powodu nie jesteś zadowolony z tych domyślnych opcji, które robi dla Ciebie curl, możesz zastąpić te metody żądań, określając -X [WHATEVER]. W ten sposób możesz na przykład wysłać DELETE, wykonując curl -X DELETE [URL].

Nie ma zatem sensu robić tego, curl -X GET [URL]co i tak byłoby używane GET. W tym samym duchu jest to bezcelowe, curl -X POST -d data [URL]...ale możesz zrobić zabawne i nieco rzadkie żądanie, które wysyła treść żądania w żądaniu GET z czymś w rodzaju curl -X GET -d data [URL].

Kopać głębiej

curl -GET(używając pojedynczego myślnika) jest po prostu niewłaściwe w tym celu. To odpowiednik określające -G, -Ea -Topcje i że zrobi coś zupełnie innego.

Dostępna jest również opcja zawijania, --getaby nie mylić spraw z żadnym. Jest to długa forma -G, która jest używana do konwersji danych określonych za pomocą -dna żądanie GET zamiast POST.

(Następnie użyłem tutaj własnej odpowiedzi, aby wypełnić FAQ curl, aby to omówić .)

Ostrzeżenia

Nowoczesne wersje curl będą informować użytkowników o tym niepotrzebnym i potencjalnie szkodliwym użyciu -X, gdy włączony jest tryb szczegółowy ( -v) - aby użytkownicy byli świadomi. Więcej wyjaśnień i motywacji w tym poście na blogu .

-G konwertuje treść POST + na zapytanie GET +

Możesz poprosić curl o przekonwertowanie zestawu -dopcji i zamiast wysyłać je w treści żądania za pomocą POST, umieścić je na końcu ciągu zapytania adresu URL i wydać GET, używając opcji `-G. Lubię to:

curl -d name=daniel -d grumpy=yes -G https://example.com/
Daniel Stenberg
źródło
5
-XGET może nie działać, ale czyni to wyraźnie.
mtyson
„Domyślnie używasz curl bez wyraźnego określenia, której metody żądania użyć. Jeśli podasz po prostu adres URL HTTP, taki jak curl example.com , użyje on GET. Jeśli użyjesz -d lub -F curl użyje POST, -I spowoduje HEAD i -T sprawią, że będzie to PUT. " Wszystko co musisz wiedzieć.
Donato,
4
Jawne jest lepsze niż niejawne, gdy tylko masz taką opcję. Awaria wcześnie, awaria szybko, zmniejsza liczbę wypadków, skraca czas debugowania. Jedynym powodem, dla którego możesz go pominąć, jest wpisanie go w wierszu poleceń. Każdy skrypt powinien określać -XGET, nawet jeśli jest to absolutnie niepotrzebne.
Backgammon,
1
@Backgammon, jeśli tak, robią to źle. Ale jasne, że mogą.
Daniel Stenberg,
2

-X [twoja metoda]
X pozwala zastąpić domyślne „Get”

** poprawione małe litery xna wielkieX

hoogw
źródło
2
To nawet nie jest próbą odpowiedzi na pytanie „czym różnią się te dwie operacje”.
Melebius
1

Użycie -X [WHATEVER]tylko zmienia ciąg metody żądania używany w żądaniu HTTP. Łatwiej to zrozumieć na podstawie dwóch przykładów - jednego z -X [WHATEVER]i jednego bez - oraz powiązanych nagłówków żądań HTTP dla każdego z nich:

# 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: */*
Jimadine
źródło