curl -GET dan -X GET

126

Curl menawarkan serangkaian panggilan metode http berbeda yang diawali dengan X, tetapi juga menawarkan metode yang sama tanpa. Saya sudah mencoba keduanya dan saya tidak bisa menemukan perbedaannya. Adakah yang bisa menjelaskan kepada saya dengan cepat bagaimana kedua operasi ini berbeda?

matsko
sumber

Jawaban:

263

Secara default Anda menggunakan curl tanpa secara eksplisit mengatakan metode permintaan mana yang akan digunakan. Jika Anda hanya memasukkan HTTP URL seperti curl http://example.comitu akan menggunakan GET. Jika Anda menggunakan -datau -Fcurl akan menggunakan POST, -Iakan menyebabkan HEAD dan-T akan membuatnya menjadi PUT.

Jika karena alasan apa pun Anda tidak senang dengan pilihan default yang dilakukan oleh curl ini, Anda dapat mengganti metode permintaan tersebut dengan menentukan -X [WHATEVER]. Dengan cara ini Anda dapat misalnya mengirim HAPUS dengan melakukan curl -X DELETE [URL].

Dengan demikian tidak ada gunanya melakukan curl -X GET [URL]karena GET akan digunakan. Dalam nada yang sama itu tidak ada gunanya untuk dilakukan curl -X POST -d data [URL]...Tapi Anda bisa membuat permintaan yang menyenangkan dan agak jarang yang mengirimkan tubuh permintaan dalam permintaan GET dengan sesuatu seperti curl -X GET -d data [URL].

Menggali lebih dalam

curl -GET(menggunakan satu tanda hubung) salah untuk tujuan ini. Itu setara dengan menentukan -G, -Edan-T dan itu akan melakukan sesuatu yang sama sekali berbeda.

Ada juga opsi curl yang disebut --getuntuk tidak mengacaukan masalah. Ini adalah bentuk panjang -G, yang digunakan untuk mengonversi data yang ditentukan dengan-d menjadi permintaan GET, bukan POST.

(Saya kemudian menggunakan jawaban saya sendiri di sini untuk mengisi FAQ ikal untuk membahas ini .)

Peringatan

Versi modern dari curl akan memberi tahu pengguna tentang penggunaan -X yang tidak perlu dan berpotensi berbahaya ini ketika mode verbose diaktifkan ( -v) - untuk membuat pengguna sadar. Lebih lanjut dijelaskan dan dimotivasi dalam posting blog ini .

-G mengubah badan POST + menjadi kueri GET +

Anda dapat meminta curl untuk mengonversi satu set -dopsi dan alih-alih mengirimnya ke badan permintaan dengan POST, letakkan di akhir string kueri URL dan keluarkan GET, dengan menggunakan `-G. Seperti ini:

curl -d name=daniel -d grumpy=yes -G https://example.com/
Daniel Stenberg
sumber
5
-XGET mungkin tidak ada op, tapi itu membuatnya eksplisit.
mtyson
"Secara default Anda menggunakan curl tanpa secara eksplisit mengatakan metode permintaan mana yang akan digunakan. Jika Anda hanya meneruskan URL HTTP seperti curl example.com, itu akan menggunakan GET. Jika Anda menggunakan -d atau -F curl akan menggunakan POST, -Aku akan menyebabkan sebuah HEAD dan -T akan membuatnya menjadi PUT. " Semua yang perlu Anda ketahui.
Donato
4
Eksplisit lebih baik daripada implisit setiap kali Anda memiliki opsi. Gagal lebih awal, cepat gagal, mengurangi kecelakaan, mengurangi waktu debug. Satu-satunya saat Anda memiliki alasan untuk melewatinya adalah saat mengetiknya di baris perintah. Setiap skrip harus menentukan -XGET bahkan ketika benar-benar tidak diperlukan.
Backgammon
1
@Backgammon jika mereka melakukannya, mereka melakukannya dengan salah. Tapi tentu, mereka bisa.
Daniel Stenberg
2

-X [metode Anda]
X memungkinkan Anda mengganti 'Dapatkan' default

** dikoreksi huruf kecil xmenjadi huruf besarX

hoogw
sumber
2
Ini bahkan tidak mencoba menjawab pertanyaan "bagaimana kedua operasi ini berbeda".
Melebius
1

Penggunaan -X [WHATEVER]hanya mengubah string metode permintaan yang digunakan dalam permintaan HTTP. Ini lebih mudah dipahami dengan dua contoh - satu dengan -X [WHATEVER]dan satu tanpa - dan header permintaan HTTP terkait untuk masing-masing:

# 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
sumber