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ź.


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.


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


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.


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


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


-2
status="curl \"${server}:${port}\""  >/tmp/tmp.txt
host_check='grep "<html" /tmp/tmp.txt'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.