Finns det något sätt att, genom ASP, kontrollera om en viss URL, t.ex http://www.kalleshemsida.nu, verkligen finns?
Anledningen är att jag vill förhindra att folk lägger in idiotiska texter och länkar som inte fungerar i ett länk-register som jag håller på att bygga till en sida.
Om det är någon som har lite exempelkod eller en länk till något ställe där man kan läsa om hur man gör så är jag väldigt tacksam.
Genom att använda XMLHTTP borde det fungera smidigt:
Dim objXMLHTTP
set objXMLHTTP = Server.CreateObject( "MSXML2.XMLHTTP" )
objXMLHTTP.Open "GET", "http://www.kalleshemsida.nu", False
objXMLHTTP.Send
Dim sReturned
sReturned = objXMLHTTP.getAllResponseHeaders()
set objXMLHTTP = Nothing
If InStr( sReturned, "OK" ) > 0 Then
' Fanns
Else
' Fanns inte
End If
Hmm... Den där funktionen returnerar felmeddelandet "0x800C0005: URL Resouce not found" om sidan inte finns, vilket i och för sig stämmer, men den hoppar in i "Finns inte"-delen at kontrollen om sidan finns.
On Error Resume Next
Dim objXMLHTTP
set objXMLHTTP = Server.CreateObject( "MSXML2.XMLHTTP" )
objXMLHTTP.Open "GET", "http://www.kalleshemsida.nu", False
objXMLHTTP.Send
Dim sReturned
sReturned = objXMLHTTP.getAllResponseHeaders()
set objXMLHTTP = Nothing
If Err.Number <> "" Then
'Fel inträffade
Else
'Fel inträffade förhoppningsvis inte
End If
Err.Clear
On Error GoTo 0
Innan man ger sig på en sån här sak så ska man nog tänka igenom vad som menas med att en URL "finns".
Om man funderar efter en stund så finns det rätt många fall att ta hänsyn till och hantera.
1. Vi får ett DNS-fel då vi försöker resolva hostnamnet. Är detta temporärt eller finns sidan inte?
2. Servern svarar inte alls på port 80. Är detta temporärt eller finns sidan inte?
3. Servern svarar och returnerar statuskod 404. Saken är klar sidan finns inte.
4. Servern svarar och returnerar en annan statuskod tex 500 (Server Error). Är detta temporärt eller finns sidan inte?
5. Servern svarar och returnerar en statuskod i intervallet 300-399 (Object moved). Vad gör vi då? Ska vi följa redirecten och kolla om den sidan finns? Ska vi byta URL:en i databasen?
6. Servern svarar och returnerar statuskod 200 OK. Finns sidan helt säkert då? Nej inte alls, det kan vara en serverspecifik 404-sida. Hur gör vi då? Ska vi scanna HTML-koden och försöka gissa vad där står? Om det är en bild? Ska vi försöka läsa vad det står på bilden?
osv ..
Anledningen till att koden ovan inte fungerar är nog att getAllResponseHeaders inte innehåller serverns statuskod borde vara bättre att titta på objXMLHTTP.Status
263 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9