analyser l'entête de réponse http de wget
Question
J'essaie d'extraire une ligne du résultat de wget mais j'ai des problèmes avec cela. Ceci est mon appel 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 cela:
$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html | egrep -i "302" <br/>
Il ne me renvoie pas la ligne contenant la chaîne. Je veux juste vérifier si le site ou siteminder est en ligne.
La solution
Le résultat de wget que vous recherchez est écrit sur stderr. Vous devez le rediriger:
$ wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml.html 2>&1 | egrep -i "302"
Autres conseils
wget
imprime les en-têtes sur stderr, pas sur 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 > & amp; 1 " partie dit de rediriger ('>') le descripteur de fichier 2 (stderr) vers le descripteur de fichier 1 (stdout).
Version légèrement améliorée de la solution déjà fournie
wget -SO- -T 1 -t 1 http://myurl.com:15000/myhtml. html 2 > & amp; 1 > / dev / null | grep -c 302
2 > & amp; 1 > / dev / null
coupera les sorties inutiles. De cette façon, egrep analysera uniquement le paramètre stderr de wget, ce qui élimine la possibilité d’attraper des chaînes contenant 302 à partir de stdout (où le fichier html est lui-même généré + la barre de traitement avec le nombre d’octets résultant e.t.c.):)
egrep -c
compte le nombre de chaînes correspondantes au lieu de simplement les afficher. Assez pour savoir combien de chaînes egrep correspondait.
wget --server-response http://www.amazon.de/xyz 2 > & amp; ; 1 | awk '/ ^ HTTP / {print $ 2}'
Juste pour expliquer un peu. Le commutateur -S
de la question initiale est un raccourci pour - server-response
.
De plus, je connais l'OP spécifié wget
, mais curl
est similaire et prend par défaut la valeur STDOUT.
curl --head --silent $yourURL
ou
curl -I -s $yourURL
Le commutateur - silent
est nécessaire uniquement pour grep
. -ability: ( -s
désactive le% de progression)