GNU/Linux >> Belajar Linux >  >> Cent OS

Tutorial Perintah cURL dengan Contoh

cURL adalah alat baris perintah dan perpustakaan yang dapat digunakan untuk menerima dan mengirim data antara klien dan server atau dua mesin yang terhubung melalui internet. Ini mendukung berbagai protokol seperti HTTP, FTP, IMAP, LDAP, POP3, SMTP dan banyak lagi.

Karena sifatnya yang serbaguna, cURL digunakan di banyak aplikasi dan untuk banyak kasus penggunaan. Misalnya, alat baris perintah dapat digunakan untuk mengunduh file, menguji API, dan men-debug masalah jaringan. Dalam artikel ini, kita akan melihat bagaimana Anda dapat menggunakan alat baris perintah cURL untuk melakukan berbagai tugas.

Isi

  • 1 Instal cURL

    • 1.1 Linux
    • 1.2 MacOS
    • 1.3 Windows
  • Penggunaan dasar 2 cURL
  • 3 Mengunduh File dengan cURL
  • 4 Anatomi permintaan/tanggapan HTTP
  • 5 Mengikuti pengalihan dengan cURL
  • 6 Melihat header respons dengan cURL
  • 7 Melihat header permintaan dan detail koneksi
  • 8 Membungkam kesalahan
  • 9 Menyetel header permintaan HTTP dengan cURL
  • 10 Membuat permintaan POST dengan cURL
  • 11 Mengirimkan data JSON dengan cURL
  • 12 Mengubah metode permintaan
  • 13 Mereplikasi permintaan browser dengan cURL
  • 14 Membuat cURL gagal pada kesalahan HTTP
  • 15 Membuat permintaan yang diautentikasi dengan cURL
  • 16 Dukungan protokol pengujian dengan cURL
  • 17 Menyetel header Host dan opsi –resolve cURL
  • 18 Menyelesaikan domain ke alamat IPv4 dan IPv6
  • 19 Menonaktifkan pemeriksaan sertifikat cURL
  • 20 Memecahkan masalah situs web dengan “perincian waktu cURL”
  • 21 file konfigurasi cURL
  • 22 Kesimpulan

Instal cURL

Linux

Sebagian besar distribusi Linux memiliki cURL yang diinstal secara default. Untuk memeriksa apakah itu diinstal pada sistem Anda atau tidak, ketik curl di jendela terminal Anda dan tekan enter. Jika tidak diinstal, itu akan menampilkan kesalahan "perintah tidak ditemukan". Gunakan perintah di bawah untuk menginstalnya di sistem Anda.

Untuk sistem berbasis Ubuntu/Debian gunakan:

sudo apt update
sudo apt install curl

Untuk sistem CentOS/RHEL, gunakan:

sudo yum install curl

Di sisi lain, untuk sistem Fedora, Anda dapat menggunakan perintah:

sudo dnf install curl

MacOS

MacOS dilengkapi dengan cURL yang sudah diinstal sebelumnya, dan menerima pembaruan setiap kali Apple merilis pembaruan untuk OS. Namun, jika Anda ingin menginstal versi terbaru dari cURL, Anda dapat menginstal curl Paket buatan sendiri. Setelah Anda menginstal Homebrew, Anda dapat menginstalnya dengan:

brew install curl

Windows

Untuk Windows 10 versi 1803 dan di atasnya, cURL sekarang dikirimkan secara default di Command Prompt, sehingga Anda dapat menggunakannya langsung dari sana. Untuk versi Windows yang lebih lama, proyek cURL memiliki binari Windows. Setelah Anda mengunduh file ZIP dan mengekstraknya, Anda akan menemukan folder bernama curl-<version number>-mingw . Pindahkan folder ini ke direktori pilihan Anda. Pada artikel ini, kita akan menganggap folder kita bernama curl-7.62.0-win64-mingw , dan kami telah memindahkannya di bawah C: .

Selanjutnya, Anda harus menambahkan bin cURL ini direktori ke Windows PATH variabel lingkungan, sehingga Windows dapat menemukannya saat Anda mengetik curl di prompt perintah. Agar ini berfungsi, Anda harus mengikuti langkah-langkah berikut:

  • Buka dialog “Properti Sistem Lanjutan” dengan menjalankan systempropertiesadvanced dari dialog Windows Run (tombol Windows + R).
  • Klik tombol “Variabel Lingkungan”.
  • Klik dua kali pada “Jalur” dari bagian “Variabel sistem”, dan tambahkan jalur C:curl-7.62.0-win64-mingwbin . Untuk Windows 10, Anda dapat melakukan ini dengan tombol "Baru" di sebelah kanan. Pada versi Windows yang lebih lama, Anda dapat mengetikkan ;C:curl-7.62.0-win64-mingwbin (perhatikan titik koma di awal) di akhir kotak teks “Nilai”.

Setelah Anda menyelesaikan langkah-langkah di atas, Anda dapat mengetik curl untuk memeriksa apakah ini berfungsi. Jika semuanya berjalan dengan baik, Anda akan melihat output berikut:

C:UsersAdministrator>curl
curl: try 'curl --help' or 'curl --manual' for more information

penggunaan dasar cURL

Sintaks dasar menggunakan cURL adalah:

curl <url>

Ini mengambil konten yang tersedia di URL yang diberikan, dan mencetaknya ke terminal. Misalnya, jika Anda menjalankan curl example.com , Anda akan dapat melihat halaman HTML yang dicetak, seperti yang ditunjukkan di bawah ini:

Ini adalah operasi paling dasar yang dapat dilakukan cURL. Di beberapa bagian berikutnya, kita akan melihat berbagai opsi baris perintah yang diterima oleh cURL.



Mengunduh File dengan cURL

Seperti yang kita lihat, cURL langsung mengunduh konten URL dan mencetaknya ke terminal. Namun, jika Anda ingin menyimpan output sebagai file, Anda dapat menentukan nama file dengan -o pilihan, seperti:

curl -o vlc.dmg https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg

Selain menyimpan konten, cURL beralih untuk menampilkan bilah kemajuan yang bagus dengan statistik unduhan, seperti kecepatan dan waktu yang dibutuhkan:

Alih-alih memberikan nama file secara manual, Anda dapat membiarkan cURL mengetahui nama file dengan -O pilihan. Jadi, jika Anda ingin menyimpan URL di atas ke file vlc-3.0.4.dmg , Anda cukup menggunakan:

curl -O https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg

Ingatlah bahwa ketika Anda menggunakan -o atau -O opsi dan file dengan nama yang sama ada, cURL akan menimpanya.

Jika Anda memiliki file yang diunduh sebagian, Anda dapat melanjutkan pengunduhan file dengan -C - pilihan, seperti yang ditunjukkan di bawah ini:

curl -O -C - https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg

Seperti kebanyakan alat baris perintah lainnya, Anda dapat menggabungkan opsi yang berbeda bersama-sama. Misalnya, pada perintah di atas, Anda dapat menggabungkan -O -C - dan tulis sebagai -OC - .

Anatomi permintaan/tanggapan HTTP

Sebelum kita menggali lebih dalam fitur-fitur yang didukung oleh cURL, kita akan membahas sedikit tentang permintaan dan tanggapan HTTP. Jika Anda sudah familiar dengan konsep-konsep ini, Anda langsung melompat ke bagian lain.

Untuk meminta sumber daya seperti halaman web, atau untuk mengirimkan beberapa data ke server, klien HTTP (seperti browser atau cURL) membuat permintaan HTTP ke server. Server merespons kembali dengan respons HTTP, yang berisi "isi ” dari halaman itu.

Permintaan HTTP berisi metode permintaan, URL, beberapa header, dan beberapa data opsional sebagai bagian dari "isi permintaan". Metode permintaan mengontrol bagaimana permintaan tertentu harus diproses. Jenis metode permintaan yang paling umum adalah "GET" dan "POST". Biasanya, kami menggunakan permintaan "GET" untuk mengambil sumber daya dari server, dan "POST" untuk mengirimkan data ke server untuk diproses. Permintaan “POST” biasanya berisi beberapa data di badan permintaan, yang dapat digunakan server.

Respons HTTP serupa dan berisi kode status, beberapa header, dan badan. Tubuh berisi data aktual yang dapat ditampilkan atau disimpan oleh klien ke file. Kode status adalah kode 3 digit yang memberi tahu klien jika permintaan berhasil atau gagal, dan bagaimana hal itu harus dilanjutkan lebih lanjut. Kode status umum adalah 2xx (berhasil), 3xx (mengalihkan ke halaman lain), dan 4xx/5xx (untuk kesalahan).

HTTP adalah "protokol lapisan aplikasi", dan berjalan di atas protokol lain yang disebut TCP. Ini menangani pengiriman ulang data yang hilang, dan memastikan bahwa klien dan server mengirimkan data pada tingkat yang optimal. Saat Anda menggunakan HTTPS, protokol lain yang disebut SSL/TLS berjalan antara TCP dan HTTP untuk mengamankan data.

Paling sering, kami menggunakan nama domain seperti google.com untuk mengakses situs web. Pemetaan nama domain ke alamat IP terjadi melalui protokol lain yang disebut DNS.



Anda sekarang harus memiliki latar belakang yang cukup untuk memahami sisa artikel ini.

Mengikuti pengalihan dengan cURL

Secara default, ketika cURL menerima pengalihan setelah membuat permintaan, itu tidak secara otomatis membuat permintaan ke URL baru. Sebagai contoh, pertimbangkan URL https://www.facebook.com . Saat Anda membuat permintaan menggunakan URL ini, server mengirimkan pengalihan HTTP 3XX ke https://www.facebook.com/ . Namun,  isi tanggapan kosong. Jadi, jika Anda mencobanya, Anda akan mendapatkan output kosong:

Jika Anda ingin cURL mengikuti pengalihan ini, Anda harus menggunakan -L pilihan. Jika Anda mengulangi, buat permintaan untuk https://www.facebook.com/ dengan -L bendera, seperti:

curl -L https://www.facebook.com/

Sekarang, Anda akan dapat melihat konten HTML halaman, mirip dengan tangkapan layar di bawah ini. Di bagian selanjutnya, kita akan melihat bagaimana kita dapat memverifikasi bahwa ada pengalihan HTTP 3XX.

Harap diingat bahwa cURL hanya dapat mengikuti pengalihan jika server membalas dengan "HTTP redirect", yang berarti bahwa server menggunakan kode status 3XX, dan menggunakan header "Lokasi" untuk menunjukkan URL baru. cURL tidak dapat memproses metode pengalihan berbasis Javascript atau HTML, atau “Refresh header“.

Jika ada rantai pengalihan, -L opsi hanya akan mengikuti arahan ulang hingga 500 kali. Anda dapat mengontrol jumlah pengalihan maksimum yang akan diikuti dengan --max-redirs bendera.

curl -L --max-redirs 700 example.com

Jika Anda menyetel tanda ini ke -1 , itu akan mengikuti pengalihan tanpa henti.

curl -L --max-redirs -1 example.com

Melihat header respons dengan cURL

Saat men-debug masalah dengan situs web, Anda mungkin ingin melihat header respons HTTP yang dikirim oleh server. Untuk mengaktifkan fitur ini, Anda dapat menggunakan -i pilihan.

Mari kita lanjutkan dengan contoh sebelumnya, dan konfirmasikan bahwa memang ada pengalihan HTTP 3XX saat Anda membuat permintaan HTTP ke https://www.facebook.com/ , dengan menjalankan:

curl -L -i https://www.facebook.com/

Perhatikan bahwa kami juga telah menggunakan -L sehingga cURL dapat mengikuti pengalihan. Anda juga dapat menggabungkan dua opsi ini dan menuliskannya sebagai -iL atau -Li bukannya -L -i .

Setelah Anda menjalankan perintah, Anda akan dapat melihat pengalihan HTTP 3XX, serta halaman HTTP 200 respons OK setelah mengikuti pengalihan:

Jika Anda menggunakan -o /-O opsi dalam kombinasi dengan -i , header dan isi respons akan disimpan ke dalam satu file.

Melihat header permintaan dan detail koneksi

Di bagian sebelumnya, kita telah melihat bagaimana Anda dapat melihat header respons HTTP menggunakan cURL. Namun, terkadang Anda mungkin ingin melihat detail selengkapnya tentang permintaan, seperti header permintaan yang dikirim dan proses koneksi. cURL menawarkan -v flag (disebut "mode verbose") untuk tujuan ini, dan dapat digunakan sebagai berikut:

curl -v https://www.booleanworld.com/

Keluaran berisi data permintaan (ditandai dengan > ), header respons (ditandai dengan < ) dan detail lainnya tentang permintaan, seperti IP yang digunakan dan proses handshake SSL (ditandai dengan * ). Badan tanggapan juga tersedia di bawah informasi ini. (Namun, ini tidak terlihat pada tangkapan layar di bawah).

Paling sering, kita tidak tertarik pada badan tanggapan. Anda cukup menyembunyikannya dengan "menyimpan" output ke perangkat nol, yaitu /dev/null di Linux dan MacOS dan NUL di Windows:

curl -vo /dev/null https://www.booleanworld.com/ # Linux/MacOS
curl -vo NUL https://www.booleanworld.com/ # Windows

Membisukan kesalahan

Sebelumnya, kita telah melihat bahwa cURL menampilkan bilah kemajuan saat Anda menyimpan output ke file. Sayangnya, bilah kemajuan mungkin tidak berguna dalam semua keadaan. Sebagai contoh, jika Anda menyembunyikan output dengan -vo /dev/null , bilah kemajuan muncul yang sama sekali tidak berguna.

Anda dapat menyembunyikan semua keluaran tambahan ini dengan menggunakan -s kepala. Jika kita melanjutkan dengan contoh sebelumnya tetapi menyembunyikan bilah kemajuan, maka perintahnya adalah:

curl -svo /dev/null https://www.booleanworld.com/ # Linux/MacOS
curl -svo NUL https://www.booleanworld.com/ # Windows

-s opsi agak agresif, karena bahkan menyembunyikan pesan kesalahan. Untuk kasus penggunaan Anda, jika Anda ingin menyembunyikan bilah kemajuan, tetapi masih melihat kesalahan apa pun, Anda dapat menggabungkan -S pilihan.

Jadi, jika Anda mencoba menyimpan output cURL ke file tetapi hanya ingin menyembunyikan bilah kemajuan, Anda dapat menggunakan:

curl -sSvo file.html https://www.booleanworld.com/

Menyetel header permintaan HTTP dengan cURL

Saat menguji API, Anda mungkin perlu menyetel header khusus pada permintaan HTTP. cURL memiliki -H pilihan yang dapat Anda gunakan untuk tujuan ini. Jika Anda ingin mengirim tajuk khusus X-My-Custom-Header dengan nilai 123 ke https://httpbin.org/get , Anda harus menjalankan:

curl -H 'X-My-Custom-Header: 123' https://httpbin.org/get

(httpbin.org adalah situs web yang sangat berguna yang memungkinkan Anda melihat detail permintaan HTTP yang Anda kirim ke sana.)

Data yang dikembalikan oleh URL menunjukkan bahwa header ini memang disetel:

Anda juga dapat mengganti header default apa pun yang dikirim oleh cURL seperti header "User-Agent" atau "Host". Klien HTTP (dalam kasus kami, cURL) mengirimkan header “User-Agent” untuk memberi tahu server tentang jenis dan versi klien yang digunakan. Juga, klien menggunakan tajuk "Host" untuk memberi tahu server tentang situs yang harus dilayaninya. Header ini diperlukan karena server web dapat meng-host beberapa situs web pada satu alamat IP.

Juga, jika Anda ingin mengatur beberapa header, Anda cukup mengulangi -H pilihan sesuai kebutuhan.

curl -H 'User-Agent: Mozilla/5.0' -H 'Host: www.google.com' ...

Namun, cURL memang memiliki pintasan tertentu untuk flag yang sering digunakan. Anda dapat mengatur header “User-Agent” dengan -A pilihan:

curl -A Mozilla/5.0 https://httpbin.org/get

Header "Referer" digunakan untuk memberi tahu server lokasi dari mana mereka dirujuk oleh situs sebelumnya. Biasanya dikirim oleh browser saat meminta Javascript atau gambar yang ditautkan ke halaman, atau saat mengikuti pengalihan. Jika Anda ingin mengatur header “Referer”, Anda dapat menggunakan -e bendera:

curl -e https://www.google.com/ https://httpbin.org/get

Jika tidak, jika Anda mengikuti serangkaian pengalihan, Anda cukup menggunakan -e ';auto' dan cURL akan mengatur pengalihan dengan sendirinya.

Membuat permintaan POST dengan cURL

Secara default, cURL mengirimkan permintaan GET, tetapi Anda juga dapat menggunakannya untuk mengirim permintaan POST dengan -d atau --data pilihan. Semua bidang harus diberikan sebagai key=value pasangan dipisahkan oleh ampersand (& ) karakter. Sebagai contoh, Anda dapat membuat permintaan POST ke httpbin.org dengan beberapa parameter:

curl --data "firstname=boolean&lastname=world" https://httpbin.org/post

Dari output, Anda dapat dengan mudah mengetahui bahwa kami memposting dua parameter (ini muncul di bawah tombol "form"):

Setiap karakter khusus seperti @ , %= atau spasi dalam nilai harus dienkode URL secara manual. Jadi, jika Anda ingin mengirimkan parameter “email” dengan nilai “[email protected]”, Anda akan menggunakan:

curl --data "email=test%40example.com" https://httpbin.org/post

Atau, Anda cukup menggunakan --data-urlencode untuk menangani ini untuk Anda. Jika Anda ingin mengirimkan dua parameter, email dan name , ini adalah bagaimana Anda harus menggunakan opsi:

curl --data-urlencode "[email protected]" --data-urlencode "name=Boolean World" https://httpbin.org/post

Jika --data parameter terlalu besar untuk diketik di terminal, Anda dapat menyimpannya ke file dan mengirimkannya menggunakan @ , seperti ini:

curl --data @params.txt example.com

Sejauh ini, kita telah melihat bagaimana Anda dapat membuat permintaan POST menggunakan cURL. Jika Anda ingin mengunggah file menggunakan permintaan POST, Anda dapat menggunakan -F ("bentuk") pilihan. Di sini, kami akan mengirimkan file test.c , di bawah nama parameter file :

curl -F [email protected] https://httpbin.org/post

Ini menunjukkan konten file, menunjukkan bahwa itu berhasil dikirim:

Mengirimkan data JSON dengan cURL

Di bagian sebelumnya, kita telah melihat bagaimana mengirimkan permintaan POST menggunakan cURL. Anda juga dapat mengirimkan data JSON menggunakan --data pilihan. Namun, sebagian besar server mengharapkan untuk menerima permintaan POST dengan pasangan nilai kunci, mirip dengan yang telah kita bahas sebelumnya. Jadi, Anda perlu menambahkan header tambahan yang disebut 'Content-Type:application/json' sehingga server memahami bahwa ia menangani data JSON dan menanganinya dengan tepat. Selain itu, Anda tidak perlu mengkodekan data URL saat mengirimkan JSON.

Jadi jika Anda memiliki data JSON berikut dan ingin membuat permintaan POST ke https://httpbin.org/post:

{
  "email": "[email protected]",
  "name": ["Boolean", "World"]
}

Kemudian, Anda dapat mengirimkan data dengan:

curl --data '{"email":"[email protected]", "name": ["Boolean", "World"]}' -H 'Content-Type: application/json' https://httpbin.org/post

Dalam hal ini, Anda dapat melihat data muncul di bawah json nilai dalam keluaran httpbin.org:

Anda juga dapat menyimpan file JSON, dan mengirimkannya dengan cara yang sama seperti yang kami lakukan sebelumnya:

curl --data @data.json https://httpbin.org/post

Mengubah metode permintaan

Sebelumnya, kita telah melihat bagaimana Anda dapat mengirim permintaan POST dengan cURL. Terkadang, Anda mungkin perlu mengirim permintaan POST tanpa data sama sekali. Dalam hal ini, Anda cukup mengubah metode permintaan ke POST dengan -X pilihan, seperti:

curl -X POST https://httpbin.org/post

Anda juga dapat mengubah metode permintaan ke hal lain, seperti PUT, DELETE, atau PATCH. Satu pengecualian penting adalah metode HEAD, yang tidak dapat disetel dengan -X pilihan. Metode HEAD digunakan untuk memeriksa apakah dokumen ada di server, tetapi tanpa mengunduh dokumen. Untuk menggunakan metode HEAD, gunakan -I pilihan:

curl -I https://www.booleanworld.com/

Saat Anda membuat permintaan HEAD, cURL menampilkan semua header permintaan secara default. Server tidak mengirim konten apa pun saat mereka menerima permintaan HEAD, jadi tidak ada apa pun setelah header:

Mereplikasi permintaan browser dengan cURL

Jika Anda ingin mereplikasi permintaan yang dibuat melalui browser Anda melalui cURL, Anda dapat menggunakan alat pengembang Chrome, Firefox, dan Safari untuk mendapatkan perintah cURL untuk melakukannya.

Langkah-langkah yang terlibat sama untuk semua platform dan browser:

  • Buka alat pengembang di Firefox/Chrome (biasanya F12 di Windows/Linux dan Cmd+Shift+I di Mac)
  • Buka tab jaringan
  • Pilih permintaan dari daftar, klik kanan dan pilih “Salin sebagai cURL”

Perintah yang disalin berisi semua header, metode permintaan, cookie, dll. yang diperlukan untuk mereplikasi permintaan yang sama persis. Anda dapat menempelkan perintah di terminal Anda untuk menjalankannya.

Membuat cURL gagal pada kesalahan HTTP

Menariknya, cURL tidak membedakan antara permintaan HTTP yang berhasil (2xx) dan permintaan HTTP yang gagal (4xx/5xx). Jadi, selalu mengembalikan status keluar 0 selama tidak ada masalah menghubungkan ke situs. Ini mempersulit penulisan skrip shell karena tidak ada cara untuk memeriksa apakah file berhasil diunduh.

Anda dapat memeriksanya dengan membuat permintaan secara manual:

curl https://www.booleanworld.com/404 -sSo file.txt

Anda dapat melihat bahwa curl tidak mencetak kesalahan apa pun, dan status keluarnya juga nol:

Jika Anda ingin mempertimbangkan kesalahan HTTP ini juga, Anda dapat menggunakan -f pilihan, seperti:

curl https://www.booleanworld.com/404 -fsSo file.txt

Sekarang, Anda dapat melihat bahwa cURL mencetak kesalahan dan juga menyetel kode status ke 22 untuk menginformasikan bahwa telah terjadi kesalahan:

Membuat permintaan yang diautentikasi dengan cURL

Beberapa halaman web dan API memerlukan autentikasi dengan nama pengguna dan kata sandi. Ada dua cara untuk melakukan ini. Anda dapat menyebutkan nama pengguna dan kata sandi dengan -u pilihan:

curl -u boolean:world https://example.com/

Atau, Anda cukup menambahkannya ke URL itu sendiri, dengan <username>:<password>@<host> sintaks, seperti yang ditunjukkan:

curl https://boolean:[email protected]/

Dalam kedua metode ini, curl membuat autentikasi “Dasar” dengan server.

Menguji dukungan protokol dengan cURL

Karena berbagai protokol yang didukung oleh cURL, Anda bahkan dapat menggunakannya untuk menguji dukungan protokol. Jika Anda ingin memeriksa apakah sebuah situs mendukung versi SSL tertentu, Anda dapat menggunakan --sslv<version> atau --tlsv<version> bendera. Misalnya, jika Anda ingin memeriksa apakah sebuah situs mendukung TLS v1.2, Anda dapat menggunakan:

curl -v --tlsv1.2 https://www.booleanworld.com/

Permintaan berlangsung secara normal, yang berarti bahwa situs tersebut mendukung TLSv1.2. Sekarang, mari kita periksa apakah situs tersebut mendukung SSL v3:

curl -v --sslv3 https://www.booleanworld.com/

Perintah ini melempar handshake_failed error, karena server tidak mendukung versi SSL ini.

Harap dicatat bahwa, tergantung pada sistem Anda dan versi/konfigurasi pustaka, beberapa opsi versi ini mungkin tidak berfungsi. Output di atas diambil dari cURL Ubuntu 16.04. Namun, jika Anda mencoba ini dengan cURL di MacOS 10.14, ini memberikan kesalahan:

Anda juga dapat menguji versi protokol HTTP dengan cara yang sama, dengan menggunakan flag --http1.0 , --http1.1 atau --http2 .

Mengatur header Host dan --resolve cURL pilihan

Sebelumnya, kita telah membahas tentang bagaimana server web memilih untuk melayani situs web yang berbeda kepada pengunjung tergantung pada header “Host”. Ini bisa sangat berguna untuk memeriksa apakah situs web Anda memiliki hosting virtual yang dikonfigurasi dengan benar, dengan mengubah header "Host". Sebagai contoh, katakanlah Anda memiliki server lokal di 192.168.0.1 dengan dua situs web yang dikonfigurasi, yaitu example1.com dan example2.com . Sekarang, Anda dapat menguji apakah semuanya telah dikonfigurasi dengan benar dengan menyetel header Host dan memeriksa apakah konten yang disajikan benar:

curl -H 'Host: example1.com' https://192.168.0.1/
curl -H 'Host: example1.com' https://192.168.0.1/

Sayangnya, ini tidak berfungsi dengan baik untuk situs web yang menggunakan HTTPS. Satu situs web dapat dikonfigurasi untuk melayani beberapa situs web, dengan setiap situs web menggunakan sertifikat SSL/TLS-nya sendiri. Karena SSL/TLS berlangsung pada tingkat yang lebih rendah daripada HTTP, ini berarti klien seperti cURL harus memberi tahu server situs web mana yang kami coba akses di tingkat SSL/TLS, sehingga server dapat memilih sertifikat yang tepat. Secara default, cURL selalu memberitahukan ini ke server.

Namun, jika Anda ingin mengirim permintaan ke IP tertentu seperti contoh di atas, server mungkin memilih sertifikat yang salah dan itu akan menyebabkan verifikasi SSL/TLS gagal. Host header hanya berfungsi di tingkat HTTP dan bukan di tingkat SSL/TLS.

Untuk menghindari masalah yang dijelaskan di atas, Anda dapat menggunakan --resolve bendera. Bendera penyelesaian akan mengirimkan permintaan ke port dan IP pilihan Anda, tetapi akan mengirimkan nama situs web di tingkat SSL/TLS dan HTTP dengan benar.

Mari kita perhatikan contoh sebelumnya. Jika Anda menggunakan HTTPS dan ingin mengirimkannya ke server lokal 192.168.0.1 , Anda dapat menggunakan:

curl https://example1.com/ --resolve example1.com:192.168.0.1:443

Ini juga berfungsi dengan baik untuk HTTP. Misalkan, jika server HTTP Anda melayani pada port 8080, Anda dapat menggunakan salah satu --resolve tandai atau atur header Host dan port secara manual, seperti:

curl https://192.168.0.1:8080/ -H 'Host: example1.com:8080'
curl https://example.com/ --resolve example1.com:192.168.0.1:8080

Kedua perintah yang disebutkan di atas adalah setara.

Menyelesaikan domain ke alamat IPv4 dan IPv6

Terkadang, Anda mungkin ingin memeriksa apakah sebuah situs dapat dijangkau melalui IPv4 atau IPv6. Anda dapat memaksa cURL untuk terhubung ke versi IPv4 atau melalui IPv6 situs Anda dengan menggunakan -4 atau -6 bendera.

Harap diingat bahwa situs web dapat dijangkau melalui IPv4 dan IPv6 hanya jika:

  • Ada data DNS yang sesuai untuk situs web yang menautkannya ke alamat IPv4 dan IPv6.
  • Anda memiliki konektivitas IPv4 dan IPv6 di sistem Anda.

Misalnya, jika Anda ingin memeriksa apakah Anda dapat menjangkau situs web icanhazip.com melalui IPv6, Anda dapat menggunakan:

curl -6 https://icanhazip.com/

Jika situs dapat dijangkau melalui HTTPS, Anda harus mendapatkan alamat IPv6 Anda sendiri di output. Situs web ini mengembalikan alamat IP publik dari setiap klien yang terhubung dengannya. Jadi, tergantung pada protokol yang digunakan, alamat IPv4 atau IPv6 akan ditampilkan.

Anda juga dapat menggunakan -v opsi bersama dengan -4 dan -6 untuk mendapatkan detail lebih lanjut.

Menonaktifkan pemeriksaan sertifikat cURL

Secara default, cURL memeriksa sertifikat saat terhubung melalui HTTPS. Namun, seringkali berguna untuk menonaktifkan pemeriksaan sertifikat, saat Anda mencoba membuat permintaan ke situs menggunakan sertifikat yang ditandatangani sendiri, atau jika Anda perlu menguji situs yang memiliki sertifikat yang salah dikonfigurasi.

Untuk menonaktifkan pemeriksaan sertifikat, gunakan -k sertifikat. Kami akan mengujinya dengan membuat permintaan ke expired.badssl.com, yang merupakan situs web yang menggunakan sertifikat SSL yang kedaluwarsa.

curl -k https://expired.badssl.com/

Dengan -k pilihan, pemeriksaan sertifikat diabaikan. Jadi, cURL mengunduh halaman dan menampilkan badan permintaan dengan sukses. Di sisi lain, jika Anda tidak menggunakan -k pilihan, Anda akan mendapatkan kesalahan, mirip dengan yang di bawah ini:

Memecahkan masalah situs web dengan “perincian waktu cURL”

Anda mungkin mengalami situasi di mana sebuah situs web sangat lambat untuk Anda, dan Anda ingin menggali lebih dalam masalah ini. Anda dapat membuat detail tampilan cURL dari permintaan, seperti waktu yang dibutuhkan untuk resolusi DNS, membuat koneksi, dll. dengan -w pilihan. Ini sering disebut sebagai "perincian waktu" cURL.

Sebagai contoh, jika Anda ingin melihat detail ini untuk menghubungkan ke https://www.booleanworld.com/ , jalankan:

curl https://www.booleanworld.com/ -sSo /dev/null -w 'namelookup:t%{time_namelookup}nconnect:t%{time_connect}nappconnect:t%{time_appconnect}npretransfer:t%{time_pretransfer}nredirect:t%{time_redirect}nstarttransfer:t%{time_starttransfer}ntotal:tt%{time_total}n'

(Jika Anda menjalankan ini dari sistem Windows, ubah /dev/null ke NUL ).

Anda akan mendapatkan beberapa output yang mirip dengan ini:

Masing-masing nilai ini dalam hitungan detik, dan inilah yang diwakili oleh setiap nilai:

  • pencarian nama — Waktu yang diperlukan untuk resolusi DNS.
  • hubungkan — Waktu yang diperlukan untuk membuat koneksi TCP.
  • koneksi aplikasi — Ini adalah waktu yang dibutuhkan untuk membuat koneksi untuk setiap lapisan antara TCP dan lapisan aplikasi, seperti SSL/TLS. Dalam kasus kami, lapisan aplikasi adalah HTTP. Juga, jika tidak ada lapisan perantara (seperti saat ada permintaan HTTP langsung), waktu ini akan selalu 0.
  • pratransfer — Ini adalah waktu yang dibutuhkan dari awal hingga transfer file akan segera dimulai.
  • mengalihkan — Ini adalah total waktu yang dibutuhkan untuk memproses setiap pengalihan.
  • mulai transfer — Waktu yang dibutuhkan dari awal hingga byte pertama akan ditransfer.
  • total — Total waktu yang dibutuhkan cURL untuk menyelesaikan seluruh proses.

Sebagai contoh, katakanlah, Anda menghadapi penundaan koneksi ke situs web dan Anda melihat nilai "namelookup" terlalu tinggi. Karena ini menunjukkan masalah dengan server DNS ISP Anda, Anda dapat mulai mencari tahu mengapa pencarian DNS sangat lambat, dan beralih ke server DNS lain jika diperlukan.

file konfigurasi cURL

Terkadang, Anda mungkin ingin membuat semua permintaan cURL menggunakan opsi yang sama. Melewati opsi ini dengan tangan bukanlah solusi yang layak, jadi cURL memungkinkan Anda menentukan opsi dalam file konfigurasi.

File konfigurasi default terletak di ~/.curlrc di Linux/MacOS dan %appdata%_curlrc di Windows. Di dalam file ini, Anda dapat menentukan opsi apa pun yang Anda butuhkan, seperti:

# Always use IPv4
-4
# Always show verbose output
-v
# When following a redirect, automatically set the previous URL as referer.
referer = ";auto"
# Wait 60 seconds before timing out.
connect-timeout = 60

Setelah membuat file di atas, coba buat permintaan dengan curl example.com . Anda akan menemukan bahwa opsi ini telah diterapkan.

Jika Anda ingin menggunakan file konfigurasi khusus, bukan file default, Anda dapat menggunakan -K opsi untuk mengarahkan curl ke file konfigurasi Anda. Sebagai contoh, jika Anda memiliki file konfigurasi bernama config.txt , maka Anda dapat menggunakannya dengan:

curl -K config.txt example.com

Kesimpulan

Pada artikel ini, kami telah membahas penggunaan paling umum dari perintah cURL. Tentu saja, artikel ini hanya menggores permukaan dan cURL dapat melakukan banyak hal lainnya. Anda dapat mengetik man curl di terminal Anda atau kunjungi halaman ini untuk melihat halaman manual yang mencantumkan semua opsi.


Cent OS
  1. Tutorial Perintah Ping Linux dengan Contoh

  2. Perintah Nohup dengan Contoh

  3. vim Tutorial dengan Contoh Perintah

  1. Tutorial Tmux:Cara Menginstal dan Menggunakan dengan Contoh Perintah

  2. Perintah Linux curl Dijelaskan dengan Contoh

  3. Perintah wc Linux dengan Contoh

  1. Tutorial Bash HereDoc Dengan Contoh

  2. Perintah Curl di Linux dengan Contoh

  3. Perintah ip Linux dengan Contoh