Como obter uma resposta de qualquer URL?

23

Pediram-me para escrever um script de shell. Para verificar se um URL está ativo / ativo ou não para o meu projeto.

Tentei encontrar algumas dicas pela internet, mas o que eu consegui é verificar se o URL existe ou não.

Eu tentei pela primeira vez 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

Minha próxima tentativa foi com 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

Mas, ambos estão verificando a existência do URL e não a resposta.

Akash
fonte
1
Acabei de dar uma olhada rápida no curl man e parece sugerir que se você usar --fail flag, ele retornará um código de saída 22 em vez de retornar uma página dizendo sobre o problema, então apenas '200 OK' fornecerá um valor de retorno de 0.
Guy

Respostas:

20

curl -Is http://www.yourURL.com | head -1Você pode tentar este comando para verificar qualquer URL.Status code 200 OKsignifica que a solicitação foi bem-sucedida e a URL está acessível.

Você também pode testar a disponibilidade da URL e obter o código de resposta usando o telnetcomando

telnet www.yourURL.com 80

80 é o número da porta.

Thushi
fonte
Obrigado por compartilhar. Tentei isso também, mas acho que isso também está verificando apenas a existência. URL $ sh q.sh para verificar: google.com/akash google.com/akash existe, mas isso está causando erro no navegador :: 404. Isso é um erro.
Akash
@ Akash: Você pode acessar esse link através do seu navegador?
Thushi 8/08/14
se este é o link ur talking--www.google.com/akash--then Não-- Ele está me dando um erro :: "404-não encontrado"
Akash
Sim, se esse URL não existe, então deveria :) O que mais você está esperando ???
Thushi 8/08/14
Mas- está me dando - que existe .. Abaixo está o código :: $ vi q.sh #! / Bin / ksh echo "dê sua url" leia url curl -ls "& url" | cabeça -1 se [$? -eq 0] echo "Exist" else echo "Não existe" fi Quando executo: $ sh q.sh, forneça seu URL www.google.com/akash Exist, mas ele deve ir para ELSE ..
Akash
5

Você pode fazer o seguinte

#!/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

As ifdeclarações não são necessárias, eu as coloquei aqui apenas para ilustrar o fluxo do script.insira a descrição da imagem aqui

Valentin Bajrami
fonte
Eu tentei isso e não está me dando os resultados esperados.
Akash
URL $ sh q.sh para verificar: www.google.com% s \ n www.google.com não existe
Akash
@ Akash Veja a resposta atualizada. Não coloque uma extensão no seu script. Também execute-o apenas por ./checkURL. Espero que ajude
Valentin Bajrami
Necessita-lo para o Projeto-Purpose .. pense- não tem acesso para executá-lo assim .. :(
Akash
O que %s\n você colocou lá? no seu comentário? Objetivo do projeto? Você deve ser mais específico do que está tentando realizar.
Valentin Bajrami
1

Seguinte coisa funcionou para mim ....

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

Eu tentei com o que @THUSHI escreveu.

Abhishek Tiwari
fonte
0

Se você for pingo URL, isso também fornecerá uma resposta

ping -c 5 www.google.com

Onde -ccontará até o tempo limite de 5 expirar.

À luz do que fui avisado, nmappode funcionar se você tiver o pacote instalado no seu sistema. curlseria uma opção melhor, mas, no entanto, aqui está um exemplo usando nmap:

nmap -p 80 -sT www.google.com

ryekayo
fonte
pingenvia uma ICMPmensagem e definitivamente não usa port 80or 443. Além disso, alguns servidores bloqueiam solicitações de ping, o que ainda torna a tentativa não confiável.
Valentin Bajrami
Você também pode executar ping nas portas. Vou apresentar um exemplo de ping uma porta em um site usando nmap
ryekayo
nmap -p 80 -sT www.google.com vai pingar porta 80. Vou editar a minha resposta logo quando eu tenha acesso ao meu PC
ryekayo
1
nmapnovamente é um pacote não padrão em muitos sistemas * nix. curlé mais comum enviado com o sistema básico. Você ainda precisa instalar nmappara conseguir algo que pode ser alcançado com as ferramentas * nix padrão.
Valentin Bajrami
1
Entendido, obrigado pela informação. Eu atualizei a minha resposta
ryekayo
0

Na maioria das vezes, o curl não funciona em https. Se você deseja verificar, pode verificar "curl --version"; você não verá a opção https; nesse caso, você pode usar abaixo

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

Yanish Pradhananga
fonte
-2
status="curl \"${server}:${port}\""  >/tmp/tmp.txt
host_check='grep "<html" /tmp/tmp.txt'
Gyanesh Gupta
fonte