Kontrollera om en webbisda fungerar

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Kontrollera om en webbisda fungerar

Inlägg av ubot »

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?
Nikke
Inlägg: 139
Blev medlem: 30 nov 2006, 07:38
OS: Fedora
Ort: Stockholm
Kontakt:

Re: Kontrollera om en webbisda fungerar

Inlägg av Nikke »

Vad jag vet så finns det inget smidigt sätt...
andol
Inlägg: 3093
Blev medlem: 31 dec 2007, 00:19
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur

Re: Kontrollera om en webbisda fungerar

Inlägg av andol »

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.
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Kontrollera om en webbisda fungerar

Inlägg av ubot »

andol skrev: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.
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?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Kontrollera om en webbisda fungerar

Inlägg av Konservburk »

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?
Jo, men problemet är att du faktiskt får svar (404) om det finns en webserver.

Kod: Markera allt

curl -Im90 http://ubuntu-se.org/download/
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.
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Kontrollera om en webbisda fungerar

Inlägg av ubot »

Konservburk skrev:
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?
Jo, men problemet är att du faktiskt får svar (404) om det finns en webserver.

Kod: Markera allt

curl -Im90 http://ubuntu-se.org/download/
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.
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?

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?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Kontrollera om en webbisda fungerar

Inlägg av Konservburk »

ubot skrev:Går det att se i "headern" att det är en felsida då eller syns det inte där?
Ja, det ser du där.

Kod: Markera allt

curl -Ism90 http://ubuntu-se.org/download/ | sed -n '1s/^HTTP\/1\.. //p'
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Kontrollera om en webbisda fungerar

Inlägg av ubot »

Konservburk skrev:
ubot skrev:Går det att se i "headern" att det är en felsida då eller syns det inte där?
Ja, det ser du där.

Kod: Markera allt

curl -Ism90 http://ubuntu-se.org/download/ | sed -n '1s/^HTTP\/1\.. //p'
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"?

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?
andol
Inlägg: 3093
Blev medlem: 31 dec 2007, 00:19
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur

Re: Kontrollera om en webbisda fungerar

Inlägg av andol »

Jo, det är standardiserat.

http://tools.ietf.org/html/rfc2616#section-10

(Nej, 302 är i sig inte nödvändigtvis ett fel.)
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Kontrollera om en webbisda fungerar

Inlägg av Konservburk »

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.
Använd -L så hoppar curl vidare...

Kod: Markera allt

curl -ILsm90 http://svd.se/jhdjdjdjsjdj/ | sed -n '/HTTP\/1\../h;${g;p}'
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"?
Du skulle kunna titta på om själva curl ger ifrån sig något fel eller inte:

Kod: Markera allt

{
curl -ILsm90 http://svd.se/jjdjsdjsdjjd/ || echo 'HTTP/1.1 curl error'
} | sed -n '/HTTP\/1\../h;${g;p}'
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Kontrollera om en webbisda fungerar

Inlägg av ubot »

Konservburk skrev:
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.
Använd -L så hoppar curl vidare...

Kod: Markera allt

curl -ILsm90 http://svd.se/jhdjdjdjsjdj/ | sed -n '/HTTP\/1\../h;${g;p}'
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"?
Du skulle kunna titta på om själva curl ger ifrån sig något fel eller inte:

Kod: Markera allt

{curl -ILsm90 http://svd.se/jjdjsdjsdjjd/ || echo 'HTTP/1.1 curl error'} | sed -n '/HTTP\/1\../h;${g;p}'
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?

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.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Kontrollera om en webbisda fungerar

Inlägg av Konservburk »

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}
Det ska vara en nyrad (eller ett mellanrum) mellan { och curl, samt en nyrad (eller ett semikolon) före }.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Kontrollera om en webbisda fungerar

Inlägg av Konservburk »

ubot skrev:Frågan är om förra curl-kommandot gör det eller om det finns andra varianter på 404-meddelanden?
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
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Kontrollera om en webbisda fungerar

Inlägg av ubot »

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
Zibri
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

Inlägg av Zibri »

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

Kod: Markera allt

curl -Lf $url; echo $?
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Kontrollera om en webbisda fungerar

Inlägg av ubot »

Konservburk skrev:
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}
Det ska vara en nyrad (eller ett mellanrum) mellan { och curl, samt en nyrad (eller ett semikolon) före }.
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?
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Kontrollera om en webbisda fungerar

Inlägg av ubot »

Zibri skrev:
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.
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.

Kod: Markera allt

curl -Lf $url; echo $?
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
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

Inlägg av Zibri »

ubot skrev:Är det alltid 200 om allt fungerar ok, om man kommer åt informationen som det är tänkt från länken?
Nej, alla HTTP-responskoder som börjar på 2 är "ok". De som börjar på 4 och 5 är fel.
Zibri
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

Inlägg av Zibri »

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?
Finns det kanske, men nog rätt sällsynt. Kan inte komma på vad det skulle vara.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Kontrollera om en webbisda fungerar

Inlägg av Konservburk »

Zibri skrev:
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.
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.

Kod: Markera allt

curl -Lf $url; echo $?
Det var ju jättebra. Då borde det räcka med något i stil med:

Kod: Markera allt

curl -Lfsm90 "$URL" && echo "$URL" fungerar
Skriv svar

Återgå till "Terminalforum"