Z pewnością istnieje inny sposób - ale wymaga to zrozumienia, co faktycznie dzieje się, gdy żądanie jest przesyłane przez Internet. Gdy odwiedzasz stronę w przeglądarce, dane są przesyłane za pomocą protokołu o nazwie HTTP (tak, dlatego często widzisz http://
na początku adresów URL).
HTTP jest protokołem tekstowym. Informacje są wymieniane między klientem a serwerem poprzez wysyłanie nagłówków, a następnie treści żądania. Nagłówki zawierają wiele informacji o stanie dotyczących żądania i przesyłanych informacji. Nagłówek, który będziesz zainteresowany, aby pomóc Ci w rozwiązaniu problemu, nie jest tak naprawdę nagłówkiem - jest to pierwszy przeniesiony wiersz i zawiera numer zwany kodem statusu. Ta liczba składa się z 3 cyfr i przekazuje informacje o stanie. Jeśli żądanie zakończyło się powodzeniem, wynik wynosi zwykle 200 (nie zawsze - są wyjątki).
Jedno jest pewne - jeśli żądany plik nie istnieje na serwerze WWW, serwer powinien odpowiedzieć kodem stanu 404. Oznacza to, że nie można znaleźć zasobu. (Dla ciekawskich oto lista kodów stanu HTTP i ich znaczenia).
Cóż, dość teorii. Zobaczmy, jak możemy to zrobić na terminalu. Świetnym narzędziem do pobierania żądań za pomocą protokołu HTTP, które umożliwia nam również sprawdzenie kodu stanu, jest cURL, który jest dostępny w repozytoriach Ubuntu. Możesz go zainstalować za pomocą:
sudo apt-get install curl
Po zainstalowaniu możesz wywołać go w następujący sposób:
curl [website]
... a treść podanego adresu URL zostanie wydrukowana na terminalu. Są to informacje, które przeglądarka przegląda podczas odwiedzania tego adresu URL. Jak nam to pomaga? Cóż, przyjrzyj się bliżej flagom curl
polecenia . Jeśli przekażemy parametr --head
, cURL zwróci tylko nagłówki z żądania. Wypróbuj z adresem URL. Otrzymasz listę wierszy formularza:
header-name: header-value
Zauważ oczywiście, że pierwsza linia nie wygląda tak. Pamiętasz kod statusu, o którym rozmawialiśmy wcześniej? Zauważysz to w pierwszym wierszu jako trzycyfrowa liczba. Teraz musimy wyodrębnić go z pierwszego wiersza za pomocą Perla - i możemy to zrobić w terminalu za pomocą -e
flagi Perla, która pozwala nam przekazać kod Perla bezpośrednio do interpretera Perla. Musimy również dodać dodatkową flagę do cURL ( --silent
), aby nie wyświetlała paska postępu i nie zepsuła naszego skryptu Perl.
Oto, czego potrzebujemy ... jest to dość skomplikowane ze względu na konieczność ucieczki dużej części z powłoki:
perl -e "\ $ s = \` curl [URL] --head --silent \ `; \ $ s = ~ m / (\\ d {3}) /; print \ $ 1"
W zasadzie polega to na pobraniu adresu URL za pomocą cURL i uruchomieniu go za pomocą wyrażenia regularnego Perla, które wyodrębnia kod stanu i drukuje go.
Teraz wystarczy wpisać adres URL sprawdzanego pliku i porównać go z „404”. Jeśli otrzymasz „404”, możesz założyć, że plik nie istnieje.
Oczywiście może to być bardzo trudne do manipulowania w terminalu, więc możesz napisać mały skrypt, który sprawia, że jest to nie tylko łatwiejsze do zrozumienia, ale także łatwiejsze do wykonania:
#!/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);
Po prostu skopiuj i wklej to do pliku. W tym przykładzie wywołam plik url_check
. Następnie uczyń plik wykonywalnym za pomocą:
chmod 755 url_check
Następnie możesz sprawdzić dowolny plik za pomocą następującego prostego polecenia:
./url_check [URL]
Zwracana wartość będzie wynosić „0”, jeśli serwer zwrócił 404, a w przeciwnym razie „1”. Następnie możesz połączyć to polecenie w powłokę, tak jak każde inne polecenie.
ping
ogóle nie wysyła żądań HTTP. Zamiast tegoping
używa protokołu o nazwie „ICMP”, aby ustalić, czy host jest osiągalny i sprawdzić opóźnienie.