2008-11-19 14 views
8

Im essayant d'extraire une ligne du résultat de wget mais ayant des problèmes avec elle. Ceci est mon appel wget:parse http en-tête de réponse de wget

$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 

Sortie:

 
--18:24:12-- http://xxx.xxxx.xxxx:15000/myhtml.html 
      => `-' 
Resolving xxx.xxxx.xxxx... xxx.xxxx.xxxx 
Connecting to xxx.xxxx.xxxx|xxx.xxxx.xxxx|:15000... connected. 
HTTP request sent, awaiting response... 
    HTTP/1.1 302 Found 
    Date: Tue, 18 Nov 2008 23:24:12 GMT 
    Server: IBM_HTTP_Server 
    Expires: Thu, 01 Dec 1994 16:00:00 GMT 
    Location: https://xxx.xxxx.xxxx/siteminderagent/... 
    Content-Length: 508 
    Keep-Alive: timeout=10, max=100 
    Connection: Keep-Alive 
    Content-Type: text/html; charset=iso-8859-1 
Location: https://xxx.xxxx.xxxx//siteminderagent/... 
--18:24:13-- https://xxx.xxxx.xxxx/siteminderagent/... 
      => `-' 
Resolving xxx.xxxx.xxxx... failed: Name or service not known. 

si je fais ceci:

$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html | egrep -i "302" <br/> 

Il ne marche pas me retourner la ligne qui contient la chaîne. Je veux juste vérifier si le site ou la siteminder est en place.

Répondre

15

La sortie de wget que vous recherchez est écrite sur stderr. Vous devez rediriger:

$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302" 
8

wget imprime les en-têtes à stderr, pas stdout. Vous pouvez rediriger stderr vers stdout comme suit:

wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302" 

Le "2> & 1" partie dit redirect ('>') descripteur de fichier 2 (stderr) au descripteur de fichier 1 (stdout).

+0

Bon détail supplémentaire à la réponse de @ Piotr. –

2

A bit version améliorée de solution déjà fourni

wget -SO- -T 1 -t 1 2 http://myurl.com:15000/myhtml.html> & 1>/dev/null | grep -c 302

2>&1 >/dev/null coupera la sortie inutile. Cette façon egrep analysera uniquement wget`s stderr, ce qui élimine la possibilité d'attraper des chaînes contenant 302 de stdout (où fichier html + lui-même télécharger la barre en sortie de procès- avec résultat octets count etc) :)

egrep -c compte nombre de chaînes correspondant au lieu de simplement les sortir. Assez pour savoir combien de chaînes egrep correspondait.

1

Juste pour expliquer un peu. Le commutateur -S dans la question d'origine est un raccourci pour --server-response.

En outre, je sais que l'OP a spécifié wget, mais curl est similaire et par défaut à STDOUT.

curl --head --silent $yourURL 

ou

curl -I -s $yourURL 

Le commutateur --silent est seulement nécessaire pour grep -Possibilité: (-s se éteint cours% mètre)

+0

certains serveurs ne répondent pas à une demande de tête – user3791372