curl -GET ve -X GET


126

Curl, bir X önekine sahip bir dizi farklı http yöntem çağrısı sunar, ancak aynı yöntemleri olmadan da sunar. İkisini de denedim ve farkı anlayamıyorum. Birisi bana bu iki işlemin nasıl farklı olduğunu hızlıca açıklayabilir mi?

Yanıtlar:


263

Varsayılan olarak, hangi istek yönteminin kullanılacağını açıkça belirtmeden curl kullanırsınız. Sadece bir HTTP URL'sini curl http://example.comiletirseniz, GET kullanacaktır. Eğer kullanırsanız -dveya -Fcurl, POST kullanacak, -Ibir HEAD'e neden -Tolacak ve onu bir PUT haline getirecektir.

Herhangi bir nedenle curl'nin sizin için yaptığı bu varsayılan seçimlerden memnun değilseniz, belirterek bu istek yöntemlerini geçersiz kılabilirsiniz -X [WHATEVER]. Bu şekilde, örneğin yaparak bir DELETE gönderebilirsiniz curl -X DELETE [URL].

Bu nedenle curl -X GET [URL], GET'in zaten kullanılacağı gibi yapmak anlamsızdır . Aynı şekilde yapmak anlamsızdır curl -X POST -d data [URL]...Ancak, GET isteğinde bir istek gövdesi gönderen eğlenceli ve biraz nadir bir istekte bulunabilirsiniz curl -X GET -d data [URL].

Daha derine inmek

curl -GET(tek bir çizgi kullanmak) bu amaç için yanlıştır. Bu -G, -Eve -Tseçeneklerini belirtmenin eşdeğeridir ve bu tamamen farklı bir şey yapar.

Ayrıca --getkonuları karıştırmamak için bir curl seçeneği de var . -dPOST yerine ile belirtilen verileri GET isteğine dönüştürmek için kullanılan -G'nin uzun biçimidir .

(Bunu kapsayacak şekilde curl SSS bölümünü doldurmak için burada kendi cevabımı kullandım .)

Uyarılar

Curl'nin modern sürümleri, -vkullanıcıları bilinçlendirmek için ayrıntılı mod etkinleştirildiğinde ( ) -X'in bu gereksiz ve potansiyel olarak zararlı kullanımı hakkında kullanıcıları bilgilendirecektir. Bu blog yazısında daha fazla açıklanmış ve motive edilmiştir .

-G, POST + gövdesini GET + sorgusuna dönüştürür

Curl'den bir dizi -dseçeneği dönüştürmesini isteyebilir ve bunları POST ile istek gövdesine göndermek yerine URL'nin sorgu dizesinin sonuna yerleştirip `-G kullanarak bir GET düzenleyebilirsiniz. Bunun gibi:

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

5
-XGET işlemsiz olabilir, ancak bunu açık hale getirir.
mtyson

"Varsayılan olarak, hangi istek yönteminin kullanılacağını açıkça belirtmeden curl kullanırsınız. Curl example.com gibi bir HTTP URL'sini iletirseniz GET kullanır. -D veya -F kullanırsanız curl POST'u kullanır, -I HEAD ve -T onu bir PUT yapacaktır. " Bilmen gereken her şey.
Donato

4
Seçeneğiniz olduğunda açık, örtük olmaktan daha iyidir. Erken başarısız olun, hızlı başarısız olun, kazaları azaltın, hata ayıklama süresini kısaltır. Atlamak için bir bahaneniz olan tek zaman, onu komut satırına yazmanızdır. Herhangi bir komut dosyası, kesinlikle gereksiz olsa bile -XGET belirtmelidir.
Tavla

1
@ Backgammon yaparlarsa, yanlış yapıyorlar. Ama elbette yapabilirler.
Daniel Stenberg

2

-X [yönteminiz]
X varsayılan 'Al'ı geçersiz kılmanıza izin verir

** küçük xharften büyük harfe doğru düzeltildiX


2
Bu, “bu iki işlemin nasıl farklılaştığı” sorusuna bile cevap vermeye çalışmıyor.
Melebius

1

Kullanımı -X [WHATEVER]yalnızca isteğin HTTP isteğinde kullanılan yöntem dizesini değiştirir . Biri olan -X [WHATEVER]diğeri olmayan iki örnek ve her biri için ilişkili HTTP istek başlıkları ile bunu anlamak daha kolaydır :

# 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: */*
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.