Kontrollera om en webbisda fungerar
Kontrollera om en webbisda fungerar
Jag behöver en funktion för att kontrollera med ett script om webbsidor fungerar utan att manuellt behöva besöka sidorna. Alltså om sidorna finns öht. Om jag har en lista med URL:er så vill jag kunna kontrollera om listan innehåller några "döda länkar". Det hade varit bra om resultatet sparades i en loggfil efteråt så att det går att se om någon länk är "död" konstant. Hur gör man för att bäst kolla existensen av en sidan en URL pekar på, tex om jag vill kolla om http://ubuntu-se.org/download/ finns?
Re: Kontrollera om en webbisda fungerar
Vad jag vet så finns det inget smidigt sätt...
Re: Kontrollera om en webbisda fungerar
En snabb (och antagligen ofullständig) sökning i Ubuntus programförråd pekade mig i alla fall på programmen
linklint och
linkchecker. Båda körs ifrån kommandoraden och borde vara relativt skriptbara.
Vill du hacka ihop något mer manuellt borde du kunna göra något kreativt med wget, och låta skriptet titta på returnerade HTTP-headers.


Vill du hacka ihop något mer manuellt borde du kunna göra något kreativt med wget, och låta skriptet titta på returnerade HTTP-headers.
Re: Kontrollera om en webbisda fungerar
Ok, får kolla närmare på programmen. Det måste ju liksom finnas ett sätt att kolla om en sida svarar. Typ wget/lynx/curl för att hämta sidan och x ggr och om det misslyckas skriva en rad i en loggfil?andol skrev:En snabb (och antagligen ofullständig) sökning i Ubuntus programförråd pekade mig i alla fall på programmenlinklint och
linkchecker. Båda körs ifrån kommandoraden och borde vara relativt skriptbara.
Vill du hacka ihop något mer manuellt borde du kunna göra något kreativt med wget, och låta skriptet titta på returnerade HTTP-headers.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Kontrollera om en webbisda fungerar
Jo, men problemet är att du faktiskt får svar (404) om det finns en webserver.ubot skrev:Det måste ju liksom finnas ett sätt att kolla om en sida svarar. Typ wget/lynx/curl för att hämta sidan och x ggr och om det misslyckas skriva en rad i en loggfil?
Kod: Markera allt
curl -Im90 http://ubuntu-se.org/download/
Re: Kontrollera om en webbisda fungerar
Jo, jag märker det, samma sak med Linkchecker. Det ger 0 error på en adress som http://svd.se/kjhfjksdhfjsdhjfhd/, men 1 error på som http://jcsxjjshsdjhjhjhfj.se. Då är ju programmet i princip bara användbart på domännamn, inte på undersidor. Attan att det ska vara så besvärligt att scanna av en lista efter döda länkar. Går det att se i "headern" att det är en felsida då eller syns det inte där?Konservburk skrev:Jo, men problemet är att du faktiskt får svar (404) om det finns en webserver.ubot skrev:Det måste ju liksom finnas ett sätt att kolla om en sida svarar. Typ wget/lynx/curl för att hämta sidan och x ggr och om det misslyckas skriva en rad i en loggfil?
Det där ger dig ett 404-svar. Försöker du med en sida som inte finns eller inte svarar så får du ett fel istället för ett svar.Kod: Markera allt
curl -Im90 http://ubuntu-se.org/download/
Linkchecker har stöd för regexp: --no-follow-url=regex och --ignore-url=regex låter mig begränsa hur Linkchecker kollar länkar. Går de kanske att mha regexp hindra redirect av Linkchecker? Jag menar, en felsida måste väl innebära att servern redirectar Linkcecker/wget/lynx eller något annat till en annan sida en den jag angett?
Typ så här: linkchecker --nofollow-url: "något regexp i stil med allt utom länkar som innehåller http://svd.se/hjfjkhsjsdhjd/"? Kanske ignorera allt utom länken: http://.*/sdfhdhhdjjsd/ eller något i den stilen? Går det att ange "motsatsen" till ett uttryck i regexp? Typ: !(http://.*/dsfjhsdfj/) eller något sådant?
Annars måste jag ju manuellt kontrollera existensen av alla länkar? Det verkar ju inte alls smidigt om man vill kolla om länkar fungerar. I WordPress finns ju ett plugin som heter Broken Links eller så och som kollar efter döda länkar. Går det pluginet på samma nit som Linkchecker om det finns en felsida, vad tror ni?
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Kontrollera om en webbisda fungerar
Ja, det ser du där.ubot skrev:Går det att se i "headern" att det är en felsida då eller syns det inte där?
Kod: Markera allt
curl -Ism90 http://ubuntu-se.org/download/ | sed -n '1s/^HTTP\/1\.. //p'
Re: Kontrollera om en webbisda fungerar
Ok, är det att lita på, generellt alltså? Är det så standardiserat att det är 99% säkert att sidan inte finns om man få resultatet i Teminalen? När jag kör http://svd.se/jhdjdjdjsjdj/ så får jag istället: 302 Moved Temporarily så informationen varierar tydligen. Vad som är av intresse är ju om orginalsidan finns eller om det är en redirect, en felsida av någon sort. Om alla "felsidor" innehåller 404, 302 eller något annat som skiljer döda länkar från fungerande webbsidor så går det ju att på något sätt spara webbadressen som gav en 404, 302 osv meddelande. De tär nog inte mer krångligt att jag klarar att sätta ihop en sådan if-sats som kollar efter numren och sedan spottar ut URL:en om curl svarar som det gör. Frågan är om det går att lite på, om det går att skilja på en fungerande sida och en "död länk"?Konservburk skrev:Ja, det ser du där.ubot skrev:Går det att se i "headern" att det är en felsida då eller syns det inte där?
Kod: Markera allt
curl -Ism90 http://ubuntu-se.org/download/ | sed -n '1s/^HTTP\/1\.. //p'
Edit:
Nu ser jag att det var "www." framför svd.se i exempelt som gav 302 meddelandet, inte slutet av URL:en. När jag kör http://www.svd.se/jjdjsdjsdjjd/ istället så får jag ju ett 404 meddelande. Är det att lite på, får man "alltid" 404 om sidan inte finns när man kör curl?
Re: Kontrollera om en webbisda fungerar
Jo, det är standardiserat.
http://tools.ietf.org/html/rfc2616#section-10
(Nej, 302 är i sig inte nödvändigtvis ett fel.)
http://tools.ietf.org/html/rfc2616#section-10
(Nej, 302 är i sig inte nödvändigtvis ett fel.)
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Kontrollera om en webbisda fungerar
Använd -L så hoppar curl vidare...ubot skrev:Ok, är det att lita på, generellt alltså? Är det så standardiserat att det är 99% säkert att sidan inte finns om man få resultatet i Teminalen? När jag kör http://svd.se/jhdjdjdjsjdj/ så får jag istället: 302 Moved Temporarily så informationen varierar tydligen.
Kod: Markera allt
curl -ILsm90 http://svd.se/jhdjdjdjsjdj/ | sed -n '/HTTP\/1\../h;${g;p}'
Du skulle kunna titta på om själva curl ger ifrån sig något fel eller inte:ubot skrev:Frågan är om det går att lite på, om det går att skilja på en fungerande sida och en "död länk"?
Kod: Markera allt
{
curl -ILsm90 http://svd.se/jjdjsdjsdjjd/ || echo 'HTTP/1.1 curl error'
} | sed -n '/HTTP\/1\../h;${g;p}'
Re: Kontrollera om en webbisda fungerar
Alla länkar jag har är undersidor till fungerande domäner. Så egentligen behöver jag inte kolla om länken är död, mer om den leder till en felsida. Frågan är om förra curl-kommandot gör det eller om det finns andra varianter på 404-meddelanden?Konservburk skrev:Använd -L så hoppar curl vidare...ubot skrev:Ok, är det att lita på, generellt alltså? Är det så standardiserat att det är 99% säkert att sidan inte finns om man få resultatet i Teminalen? När jag kör http://svd.se/jhdjdjdjsjdj/ så får jag istället: 302 Moved Temporarily så informationen varierar tydligen.
Kod: Markera allt
curl -ILsm90 http://svd.se/jhdjdjdjsjdj/ | sed -n '/HTTP\/1\../h;${g;p}'
Du skulle kunna titta på om själva curl ger ifrån sig något fel eller inte:ubot skrev:Frågan är om det går att lite på, om det går att skilja på en fungerande sida och en "död länk"?
Kod: Markera allt
{curl -ILsm90 http://svd.se/jjdjsdjsdjjd/ || echo 'HTTP/1.1 curl error'} | sed -n '/HTTP\/1\../h;${g;p}'
När jag kör din senaste kod så får jag upp samma meddelande på döda länkar som på fungerande länkar:
bash: {curl: command not found
HTTP/1.1 curl error}
Det bästa hade såklart varit om jag hade kunnat kolla om länkarna fungerar, dvs oavsett om dom leder till en 404 sida, eller om dom inte alls fungerar. Helt enkelt kolla om länkarna går precis dit som ska.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Kontrollera om en webbisda fungerar
Det ska vara en nyrad (eller ett mellanrum) mellan { och curl, samt en nyrad (eller ett semikolon) före }.ubot skrev:När jag kör din senaste kod så får jag upp samma meddelande på döda länkar som på fungerande länkar:
bash: {curl: command not found
HTTP/1.1 curl error}
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Kontrollera om en webbisda fungerar
404 betyder alltid att sidan inte finns. Men du kan få ett gäng andra felmeddelanden, t.ex. 403 om någon har klantat sig med filrättigheterna.ubot skrev:Frågan är om förra curl-kommandot gör det eller om det finns andra varianter på 404-meddelanden?
Re: Kontrollera om en webbisda fungerar
Jag hade också tänkt mig att i slutändan sätta in en bra "curl-kod" i ett script som ser ut någonting i stil med det här:
while readline $url
do
curl -Ism90 $url | sed -n '1s/^HTTP\/1\.. //p'
if [ $check -neq 0 ]
then echo $url >> $HOME/deadlinks.txt
done < list_of_urls.txt
while readline $url
do
curl -Ism90 $url | sed -n '1s/^HTTP\/1\.. //p'
if [ $check -neq 0 ]
then echo $url >> $HOME/deadlinks.txt
done < list_of_urls.txt
-
- Inlägg: 44
- Blev medlem: 15 maj 2007, 14:29
- OS: Debian
- Utgåva: 14.04 Trusty Tahr LTS
- Ort: Ronneby
Re: Kontrollera om en webbisda fungerar
curl returnerar 0 om det funkar och positivt värde över 0 när det inte funkar (se curl(1) för lista på returvärden och betydelse); Om det enda du behöver kolla är "funkar det? funkar det inte?" räcker det med att kolla om $? är 0 eller ej. Som default räknas inte en 404 som ett fel, men genom att sätta flaggan -f returneras fel 22 vid sådana tillfällen.ubot skrev:Det bästa hade såklart varit om jag hade kunnat kolla om länkarna fungerar, dvs oavsett om dom leder till en 404 sida, eller om dom inte alls fungerar. Helt enkelt kolla om länkarna går precis dit som ska.
Kod: Markera allt
curl -Lf $url; echo $?
Re: Kontrollera om en webbisda fungerar
Ok, bra, nu fungerar koden. 404 om sidan saknas och 200 om sidan finns det lilla jag har hunnit testa. Jag vill egentligen inte se om sidan saknas utan om den är åtkomlig, dvs om informationen går att få tag på, så vad jag vill ha är kanske 200 som svar? Jag vill veta om det går att besöka och se den "riktiga" informationen i länken, dvs inte någon felsida eller sida som ger "sidan kan inte laddas" i webbläsaren. Jag menar, jag vill inte veta vad som är fel, jag vill veta vad som är rätt. Om det är "curl error" eller om det är "404" spelar ingen roll, länken ska vara helt ok. Är det alltid 200 om allt fungerar ok, om man kommer åt informationen som det är tänkt från länken?Konservburk skrev:Det ska vara en nyrad (eller ett mellanrum) mellan { och curl, samt en nyrad (eller ett semikolon) före }.ubot skrev:När jag kör din senaste kod så får jag upp samma meddelande på döda länkar som på fungerande länkar:
bash: {curl: command not found
HTTP/1.1 curl error}
Re: Kontrollera om en webbisda fungerar
Aha, ok. Intressant. Går det att lita på då, säger curl alltid 0 om länken fungerar, dvs om det inte blir något strul? Finns det undantag när curl ger över 0 för länkar som faktiskt fungerar så att en wbbläsare skulle kunna ratta in informationen som länken var avsedd för från första början?Zibri skrev:curl returnerar 0 om det funkar och positivt värde över 0 när det inte funkar (se curl(1) för lista på returvärden och betydelse); Om det enda du behöver kolla är "funkar det? funkar det inte?" räcker det med att kolla om $? är 0 eller ej. Som default räknas inte en 404 som ett fel, men genom att sätta flaggan -f returneras fel 22 vid sådana tillfällen.ubot skrev:Det bästa hade såklart varit om jag hade kunnat kolla om länkarna fungerar, dvs oavsett om dom leder till en 404 sida, eller om dom inte alls fungerar. Helt enkelt kolla om länkarna går precis dit som ska.
Kod: Markera allt
curl -Lf $url; echo $?
-
- Inlägg: 44
- Blev medlem: 15 maj 2007, 14:29
- OS: Debian
- Utgåva: 14.04 Trusty Tahr LTS
- Ort: Ronneby
Re: Kontrollera om en webbisda fungerar
Nej, alla HTTP-responskoder som börjar på 2 är "ok". De som börjar på 4 och 5 är fel.ubot skrev:Är det alltid 200 om allt fungerar ok, om man kommer åt informationen som det är tänkt från länken?
-
- Inlägg: 44
- Blev medlem: 15 maj 2007, 14:29
- OS: Debian
- Utgåva: 14.04 Trusty Tahr LTS
- Ort: Ronneby
Re: Kontrollera om en webbisda fungerar
Finns det kanske, men nog rätt sällsynt. Kan inte komma på vad det skulle vara.ubot skrev:Aha, ok. Intressant. Går det att lita på då, säger curl alltid 0 om länken fungerar, dvs om det inte blir något strul? Finns det undantag när curl ger över 0 för länkar som faktiskt fungerar så att en wbbläsare skulle kunna ratta in informationen som länken var avsedd för från första början?
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Kontrollera om en webbisda fungerar
Det var ju jättebra. Då borde det räcka med något i stil med:Zibri skrev:curl returnerar 0 om det funkar och positivt värde över 0 när det inte funkar (se curl(1) för lista på returvärden och betydelse); Om det enda du behöver kolla är "funkar det? funkar det inte?" räcker det med att kolla om $? är 0 eller ej. Som default räknas inte en 404 som ett fel, men genom att sätta flaggan -f returneras fel 22 vid sådana tillfällen.ubot skrev:Det bästa hade såklart varit om jag hade kunnat kolla om länkarna fungerar, dvs oavsett om dom leder till en 404 sida, eller om dom inte alls fungerar. Helt enkelt kolla om länkarna går precis dit som ska.
Kod: Markera allt
curl -Lf $url; echo $?
Kod: Markera allt
curl -Lfsm90 "$URL" && echo "$URL" fungerar