Kesinlikle başka bir yol var - ancak bu, İnternet üzerinden bir istek yapıldığında gerçekte ne olduğunu anlamayı gerektirir. Web tarayıcınızdaki bir sayfayı ziyaret ettiğinizde, veriler HTTP adlı bir protokol kullanılarak aktarılır (evet, bu yüzden sık sık http://
URL'lerin başında görürsünüz ).
HTTP, metin tabanlı bir protokoldür. Bilgi, istemci ve sunucu arasında, üstbilgileri ve ardından istek gövdesini göndererek paylaşılır. Üstbilgiler, istek ve aktarılan bilgiler hakkında birçok durum bilgisi içerir. Sorununuzda size yardımcı olmak için ilginizi çekeceğiniz başlık gerçekten de bir başlık değildir - aktarılan ilk satırdır ve durum kodu adı verilen bir sayı içerir. Bu sayı 3 basamaklıdır ve durum bilgilerini aktarır. Bir istek başarılı olursa, sonuç genellikle 200 olur (her zaman değil - istisnalar vardır).
Kesin olan bir şey var - istediğiniz dosya web sunucusunda yoksa, sunucu 404 durum koduyla yanıt vermelidir. Bu, kaynağın bulunamadığını gösterir. (Merak için buraya HTTP durum kodları ve anlamlarını listesidir.)
Yeterli teori. Bunu terminalde nasıl yapabileceğimizi görelim. HTTP'yi kullanarak durum kodunu inceleme olanağı sağlayan istekleri almak için harika bir araç, Ubuntu depolarında bulunan cURL'dir. Şunlarla kurabilirsiniz:
sudo apt-get install curl
Yükledikten sonra, aşağıdaki gibi çağırabilirsiniz:
curl [website]
... ve belirtilen URL'nin içeriği terminale yazdırılacaktır. Bu, web tarayıcınızın söz konusu URL'yi ziyaret ettiğinde gördüğü bilgidir. Bu bize nasıl yardımcı oluyor? Komuta ait bayraklaracurl
yakından bakın . Parametreyi --head
iletirsek, cURL yalnızca istekteki başlıkları döndürür . Bir URL ile deneyin. Formun satırlarının bir listesini alırsınız:
header-name: header-value
Tabii ki, ilk satırın böyle görünmediğine dikkat edin. Daha önce bahsettiğimiz durum kodunu hatırlıyor musunuz? İlk satırda üç basamaklı sayı olarak göreceksiniz. Şimdi yapmamız gereken Perl kullanarak ilk satırdan çıkartmaktır - ve -e
Perl kodunu doğrudan Perl yorumlayıcısına geçirmemize izin veren Perl bayrağını kullanarak terminalde yapabiliriz . Ayrıca --silent
, bir ilerleme çubuğu görüntülemesini ve Perl betiğimizi bozmasını önlemek için cURL ( ) öğesine fazladan bir bayrak eklememiz gerekecek .
İşte ihtiyacımız olan şey ... birçoğu kabuktan kaçma ihtiyacı nedeniyle oldukça karmaşık:
perl -e "\ $ s = \` curl [URL] --head --silent \ `; \ $ s = ~ m / (\\ d {3}) /; yazdır \ $ 1"
Bunun temel olarak yaptığı şey, URL'yi cURL ile almak ve bunu durum kodunu çıkaran ve çıktısını alan bir Perl düzenli ifadesi aracılığıyla çalıştırmaktır.
Şimdi tek yapmanız gereken kontrol etmekte olduğunuz dosyanın URL'sine koymak ve '404' ile karşılaştırmak. Eğer '404' alırsanız, dosyanın mevcut olmadığını varsayabilirsiniz.
Tabii ki, bu terminalde manipüle etmek çok zor olabilir, bu yüzden bunu sadece daha kolay değil aynı zamanda yürütmeyi de kolaylaştıran küçük bir komut dosyası yazabilirsiniz:
#!/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);
Bunu kopyalayıp bir dosyaya yapıştırmanız yeterlidir. Bu örnek için dosyayı arayacağım url_check
. Daha sonra dosyayı şununla çalıştırılabilir yapın:
chmod 755 url_check
Ardından, aşağıdaki basit komutla herhangi bir dosyayı kontrol edebilirsiniz:
./url_check [URL]
Sunucu 404 ve '1' döndürürse dönüş değeri '0' olur. Daha sonra bu komutu diğer komutlarda yaptığınız gibi kabukta zincirleyebilirsiniz.
ping
HTTP isteği göndermediğine dikkat edilmelidir . Daha ziyade,ping
bir ana bilgisayarın erişilebilir olup olmadığını belirlemek ve gecikmeyi kontrol etmek için 'ICMP' adlı bir protokol kullanır.