Tentu ada cara lain - tetapi ini membutuhkan pemahaman apa yang sebenarnya terjadi ketika permintaan dilakukan melalui Internet. Ketika Anda mengunjungi halaman di browser web Anda, data ditransfer menggunakan protokol yang disebut HTTP (ya, inilah sebabnya Anda akan sering melihat http://
di awal URL).
HTTP adalah protokol berbasis teks. Informasi dipertukarkan antara klien dan server dengan mengirimkan header diikuti oleh tubuh permintaan. Header berisi banyak informasi status tentang permintaan dan informasi yang ditransfer. Header yang akan membuat Anda tertarik untuk membantu Anda dengan masalah Anda sama sekali bukan header - itu adalah baris pertama yang ditransfer dan berisi nomor yang disebut kode status. Nomor ini adalah 3 digit dan menyampaikan informasi status. Jika permintaan berhasil, hasilnya biasanya 200 (tidak selalu - ada pengecualian).
Satu hal yang pasti - jika file yang Anda minta tidak ada di server web, server harus membalas dengan kode status 404. Ini menunjukkan bahwa sumber daya tidak dapat ditemukan. (Untuk yang penasaran, berikut adalah daftar kode status HTTP dan artinya.)
Cukup teori. Mari kita lihat bagaimana kita bisa melakukan ini di terminal. Alat hebat untuk mengambil permintaan menggunakan HTTP yang juga memberi kami kemampuan untuk memeriksa kode status adalah cURL, yang tersedia di repo Ubuntu. Anda dapat menginstalnya dengan:
sudo apt-get install curl
Setelah diinstal, Anda dapat menjalankannya seperti:
curl [website]
... dan konten dari URL yang diberikan akan dicetak ke terminal. Ini adalah informasi yang dilihat browser web Anda ketika mengunjungi URL itu. Bagaimana ini membantu kita? Nah, perhatikan bendera untuk curl
perintah . Jika kami melewati parameter --head
, cURL hanya akan mengembalikan header dari permintaan. Cobalah dengan URL. Anda akan mendapatkan daftar garis formulir:
header-name: header-value
Perhatikan, tentu saja, baris pertama tidak seperti ini. Ingat kode status yang kita bicarakan sebelumnya? Anda akan melihatnya di baris pertama sebagai angka tiga digit. Yang perlu kita lakukan sekarang adalah mengekstraknya dari baris pertama menggunakan Perl - dan kita bisa melakukannya di terminal menggunakan -e
flag Perl yang memungkinkan kita meneruskan kode Perl langsung ke penerjemah Perl. Kami juga perlu menambahkan bendera tambahan ke cURL ( --silent
) agar tidak menampilkan bilah progres dan mengacaukan skrip Perl kami.
Inilah yang kami butuhkan ... cukup rumit karena harus keluar dari shell:
perl -e "\ $ s = \` curl [URL] --head --silent \ `; \ $ s = ~ m / (\\ d {3}) /; print \ $ 1"
Apa yang pada dasarnya dilakukan adalah mengambil URL dengan cURL dan menjalankannya melalui ekspresi reguler Perl yang mengekstrak kode status dan mencetaknya.
Sekarang yang Anda butuhkan adalah memasukkan URL file yang Anda periksa dan membandingkannya dengan '404'. Jika Anda mendapatkan '404', Anda dapat menganggap file tersebut tidak ada.
Tentu saja, ini bisa sangat sulit untuk dimanipulasi di terminal, sehingga Anda dapat menulis skrip kecil yang membuat ini tidak hanya lebih mudah dimengerti, tetapi juga lebih mudah untuk dieksekusi:
#!/usr/bin/perl
# Get the URL
$url = $ARGV[0];
# Fetch the header
$header = `curl $url --head --silent`;
# Try to find the status code
$header =~ m/(\d{3})/;
# Return the result
exit(0) if $1 == 404;
exit(1);
Cukup salin dan tempel ke file. Untuk contoh ini, saya akan memanggil file url_check
. Kemudian buat file tersebut dapat dieksekusi dengan:
chmod 755 url_check
Kemudian Anda dapat memeriksa file apa pun dengan perintah sederhana berikut:
./url_check [URL]
Nilai kembali akan menjadi '0' jika server mengembalikan 404 dan '1' sebaliknya. Anda kemudian dapat rantai perintah ini di shell seperti yang Anda lakukan pada perintah lain.
ping
tidak mengirim permintaan HTTP sama sekali. Sebaliknya,ping
menggunakan protokol yang disebut 'ICMP' untuk menentukan apakah host dapat dijangkau dan untuk memeriksa latensi.