Jak uzyskać odpowiedź z dowolnego adresu URL?

23

Poproszono mnie o napisanie skryptu powłoki, aby sprawdzić, czy adres URL działa poprawnie, czy nie działa w moim projekcie.

Próbowałem znaleźć jakieś wskazówki w Internecie, ale wszystko, co otrzymałem, polega na sprawdzeniu, czy adres URL istnieje, czy nie.

Najpierw próbowałem wget.

wget -S --spider https://genesis-dev.webbank.ssmb.com:21589/gop-ui/app.jsp 2>&1 | awk '/^  /'
if [ $? -ne 0 ]
then echo "Server is UP"
else
echo "Server is down"
fi

Moja kolejna próba była z curl .

curl -ivs  https://genesis-dev.webbank.ssmb.com:21589/opconsole-sit/opconsole.html#
if [ $? -ne 0 ]
then echo "Server is UP"
else
echo "Server is down"
fi

Ale oba sprawdzają istnienie adresu URL, a nie odpowiedź.

Akash
źródło
1
Właśnie rzuciłem okiem na curl mana i wydaje się sugerować, że użyjesz flagi --fail zwróci kod wyjścia 22, a nie stronę z informacją o problemie, więc tylko „200 OK” da wartość zwracaną z 0.
Guy

Odpowiedzi:

20

curl -Is http://www.yourURL.com | head -1 Możesz wypróbować to polecenie, aby sprawdzić dowolny kod URL.Status 200 OK oznacza, że ​​żądanie się powiodło i adres URL jest osiągalny.

Możesz również przetestować dostępność adresu URL i uzyskać kod odpowiedzi za pomocą telnetpolecenia

telnet www.yourURL.com 80

80 to numer portu.

Thushi
źródło
Dzięki za udostępnienie. Próbowałem tego również, ale myślę, że to sprawdza także tylko istnienie. $ sh q.sh URL do sprawdzenia: google.com/akash google.com/akash istnieje, ale powoduje to błąd w przeglądarce :: 404. To jest błąd.
Akash
@Akash: Czy możesz uzyskać dostęp do tego linku za pośrednictwem przeglądarki?
Thushi,
jeśli to jest link do twojej rozmowy--www.google.com/akash-- następnie NIE-- Daje mi to błąd :: „404-not found”
Akash
Tak, jeśli ten adres URL nie istnieje, powinien :) Czego jeszcze oczekujesz ???
Thushi,
Ale - to daje mi - że istnieje .. Poniżej znajduje się kod: $ vi q.sh #! / Bin / ksh echo "podaj swój adres URL" czytaj adres URL curl -ls "& url" | głowa -1 jeśli [$? -eq 0] następnie echo „Exist” else echo „Don't Exist” fi Po uruchomieniu tego :: $ sh q.sh podaj swój adres www.google.com/akash Exist, ale powinien przejść do ELSE ..
Akash
5

Możesz wykonać następujące czynności

#!/bin/bash

read -p "URL to check: " url
if curl --output /dev/null --silent --head --fail "$url"; then
  printf '%s\n' "$url exist"
else
  printf '%s\n' "$url does not exist"
fi

Te ifoświadczenia nie są konieczne, choć ja je tu po prostu ilustrują przepływ skryptu.wprowadź opis zdjęcia tutaj

Valentin Bajrami
źródło
próbowałem tego i nie daje to oczekiwanych rezultatów.
Akash
$ sh q.sh URL do sprawdzenia: www.google.com% s \ n www.google.com nie istnieje
Akash
@Akash Zobacz zaktualizowaną odpowiedź. Nie umieszczaj rozszerzenia skryptu. Uruchom także tylko przez ./checkURL. Mam nadzieję, że to pomoże
Valentin Bajrami
Potrzebujesz go do celu projektowego .. pomyśl- nie mam dostępu, aby go tak uruchomić .. :(
Akash
Co %s\n tam umieściłeś? na twój komentarz? Cel projektu? Powinieneś bardziej szczegółowo określać to, co próbujesz osiągnąć.
Valentin Bajrami,
1

Następująca rzecz działała dla mnie ....

status="$(curl -Is http://www.google.com | head -1)"
validate=( $status )
if [ ${validate[-2]} == "200" ]; then
  echo "OK"
else
  echo "NOT RESPONDING"
fi

Próbowałem z tego, co napisał @THUSHI.

Abhishek Tiwari
źródło
0

Jeśli masz pingadres URL, to również da ci odpowiedź

ping -c 5 www.google.com

Gdzie -cbędzie się liczyć, aż upłynie limit 5.

W świetle tego, co mi doradzono, nmapmoże działać, jeśli masz zainstalowany pakiet w systemie. curlbyłaby lepszym rozwiązaniem, ale mimo to oto przykład użycia nmap:

nmap -p 80 -sT www.google.com

ryekayo
źródło
pingwysyła ICMPwiadomość i zdecydowanie nie używa portu 80lub 443. Również niektóre serwery blokują żądania ping, co wciąż czyni próbę niewiarygodną.
Valentin Bajrami,
Możesz również pingować porty.
Prześlę
nmap -p 80 -sT www.google.com wysyła polecenie ping do portu 80. Wkrótce zmodyfikuję swoją odpowiedź, gdy uzyskam dostęp do komputera
ryekayo
1
nmapznowu jest to domyślny pakiet w wielu systemach * nix. curljest częściej dostarczany z systemem podstawowym. Musisz jeszcze zainstalować, nmapaby osiągnąć coś, co można osiągnąć za pomocą standardowych narzędzi * nix.
Valentin Bajrami,
1
Zrozumiałem, dziękuję za informację. Zaktualizowałem swoją odpowiedź
ryekayo,
0

W większości przypadków curl nie działa na https, jeśli chcesz sprawdzić, możesz sprawdzić poprzez „curl --version” , nie zobaczysz opcji https, w takim przypadku możesz użyć poniżej

wget --post-data '{"name":"Radha", "Car": "Jaquar"}' --header "Content-Type: application/json" --no-check-certificate https://yourrequiredURI

Yanish Pradhananga
źródło
-2
status="curl \"${server}:${port}\""  >/tmp/tmp.txt
host_check='grep "<html" /tmp/tmp.txt'
Gyanesh Gupta
źródło