Foros del Web » Programando para Internet » ASP Clásico »

Verificar si un link esta roto

Estas en el tema de Verificar si un link esta roto en el foro de ASP Clásico en Foros del Web. Hola a todos, tengo unos problemas con un programa que he hecho en asp que me verifica si un link esta roto o no, y ...
  #1 (permalink)  
Antiguo 30/01/2006, 05:33
 
Fecha de Ingreso: enero-2006
Ubicación: Madrid
Mensajes: 148
Antigüedad: 18 años, 10 meses
Puntos: 0
Verificar si un link esta roto

Hola a todos, tengo unos problemas con un programa que he hecho en asp que me verifica si un link esta roto o no, y es que me da cuando verifico un número elevado de links(a partir de 130 me empieza a dar problemas) un error de Timed Out.Al principio pensé en poner a server.ScriptTimeout un valor muy alto, para que dejase de darme el problema, y algo solucionó pero me sigue dando el mismo problema.
El 2º error que me da es cuando el link está roto pero el error en vez de ser Not Found(404) me da al abrir el link el error "No se puede mostrar la página", y el programa casca diciendome :
Tipo de error:
msxml3.dll (0x80072EE7)
The server name or address could not be resolved.
3º que diferecia hay entre una página con bad request o que este ok, porque los links que están correctos me pone OK, pero otros que supuestamente tambien estan correctos, porque al abrirlos te aparece la página, me devuelve BAD REQUEST y no se porqu es.
Bueno espero que alguien pueda ayudarme muchas gracias de todas formas hasta luego.

Por cierto el programa es este, que casi se me olvida:

Código:
<%

Set miconexion=Server.CreateObject("ADOdb.Connection")
		
			miconexion.Open "Mibasededatos"
	
			Set rs=miconexion.execute("select * from links")	
				
			cont_ofertas=0
			cont_caducadas=0
			cont_ok=0
		
			while not rs.eof
				link=rs("link")
				
				if len(link)>0  then
					cont_ofertas=cont_ofertas+1
					%><tr><td><a href="<%=link%>" target="_blank"><%response.Write(link)%></a></td>
						  <td align="center"><%Response.write(GetHTML(link,cont_caducada,cont_ok))%></td>
					 </tr><%
				end if
				rs.movenext
			wend
			%>
			</table>
			<table>
				<tr>
					<td><%response.Write("El numero de links revisados son " & cont_ofertas)%></td>
				</tr>
				<tr>
					<td>
						<%response.Write("El numero de links caducados son: " & cont_caducadas)%>
					</td>
				</tr>
				<tr>
					<td>
						<%response.Write("El numero de links correctos son: " & cont_ok)%>
					</td>
				</tr>
			</table>
<%

Function GetHTML(strURL,cont_caducada,cont_ok)
	Dim objXMLHTTP, strReturn, strHTML
	Set objXMLHTTP = SErver.CreateObject("MSXML2.ServerXMLHTTP")
	objXMLHTTP.Open "GET", strURL, False
	objXMLHTTP.setRequestHeader "Accept-Language", "sp"
	objXMLHTTP.setRequestHeader "Pragma", "no-cache"
	objXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
	objXMLHTTP.SetRequestHeader "Content-Type", "text/html"
	objXMLHTTP.SetRequestHeader "charset", "iso-8859-1"
	objXMLHTTP.Send
	if objXMLHTTP.statusText<>"OK" and objXMLHTTP.statusText<>"Found" then
		if objXMLHTTP.statusText="Not Found" or objXMLHTTP.statusText="Object Not Found" then
			cont_caducadas=cont_caducadas+1
			response.Write (objXMLHTTP.statustext)
		end if
	else
		cont_ok=cont_ok+1
		Response.write objXMLHTTP.statustext
	end if
	Set objXMLHTTP = Nothing
End Function

Última edición por kalandas; 30/01/2006 a las 06:19
  #2 (permalink)  
Antiguo 30/01/2006, 10:19
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 22 años, 10 meses
Puntos: 0
kal soy al00

para el primer error, decirte, q cada vez te descargas la web destino,
tiene q ver si es posible pedirle menos informacion y menos comunicacion.

objXMLHTTP.Open "GET", strURL, False
objXMLHTTP.Send

estudia bien el objeto objXMLHTTP.Open, tal vez permita un acceso mas optimo y esto nos de luz sobre le resto de problemas.

Última edición por rrufo; 30/01/2006 a las 10:40
  #3 (permalink)  
Antiguo 30/01/2006, 10:27
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 22 años, 10 meses
Puntos: 0
http://www.devguru.com/features/tuto...p/XmlHttp2.asp

en open puedes jugar con get/post y false/true

mira tb de utilizar objXmlHttp.status = 200

en vez de objXMLHTTP.statusText,
q te habla sobre el texto, incluido el de "No se puede mostrar la página"

status te da el estado de la pagina, 200 es correcto, 400 y 500 malo
incluso si quieres curratelo, puedes dar el error de cada pagina.

Última edición por rrufo; 30/01/2006 a las 10:42
  #4 (permalink)  
Antiguo 30/01/2006, 12:09
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 1 mes
Puntos: 27
interesante
__________________
JuanRa Pérez
San Salvador, El Salvador
  #5 (permalink)  
Antiguo 31/01/2006, 02:33
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 22 años, 10 meses
Puntos: 0
YA ESTA

o con On Error GoTo ExecuteError de asp
q no se como funciona y podras completar:

lo puedes ver en accion en:



Código:
<%

'Let page run for 4 minutes
Server.ScriptTimeout = 240
Function GetHTML(strURL,cont_caducada,cont_ok)
  on error resume next
  'puedes cazar el error pasa sacar por pantalla y sumar la variable

  Dim objXMLHTTP, strReturn, strHTML
  Set objXMLHTTP = SErver.CreateObject("MSXML2.ServerXMLHTTP")
  objXMLHTTP.Open "HEAD", strURL, False
  objXMLHTTP.Send ()
  if (objXMLHTTP.Status >= 200 And objXMLHTTP.Status < 300) then
    cont_ok=cont_ok+1
    response.Write (objXMLHTTP.statustext)
  else
    cont_caducadas=cont_caducadas+1
    Response.write (objXMLHTTP.statustext)
    Set objXMLHTTP = Nothing
  end if

End Function
%>

Última edición por rrufo; 05/07/2006 a las 04:57
  #6 (permalink)  
Antiguo 31/01/2006, 02:51
 
Fecha de Ingreso: enero-2006
Ubicación: Madrid
Mensajes: 148
Antigüedad: 18 años, 10 meses
Puntos: 0
Hola rrufo, gracias por contestar acabo de leer tus contestaciones, voy a probar con lo que me has dicho, y buscar por internet el objeto objXMLHTTP. Para lo del primer problema, el tema de Timed Out, el error me lo dice siempre en la linea de objXMLHTTP.Send así que debería ponerme a mirar ahi, si hago algún avance os infromo debidamente.
Otra cosa que mas da poner objXMLHTTP.status<>"200" que poner objXMLHTTP.statustext<>"OK" si total el 200 es el Ok no? bueno si me dices que puede fallar por ahi tambien lo cambio pero me parece lo mismo.
venga un saludo ciao

Última edición por kalandas; 31/01/2006 a las 02:57
  #7 (permalink)  
Antiguo 31/01/2006, 03:15
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 22 años, 10 meses
Puntos: 0
mira el codigo q te pege antes,
lo he editado ahora mismo

statustext tal vez tb te funcione.

y repasa On Error GoTo para cazar el error y tratarlo.
  #8 (permalink)  
Antiguo 31/01/2006, 03:20
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 22 años, 10 meses
Puntos: 0
if (objXMLHTTP.Status >= 200 And objXMLHTTP.Status < 300) then
cont_ok=cont_ok+1
response.Write (objXMLHTTP.statustext)
else
cont_caducadas=cont_caducadas+1
Response.write (objXMLHTTP.statustext)
Set objXMLHTTP = Nothing
end if

me parece lo mas adecuado
  #9 (permalink)  
Antiguo 31/01/2006, 03:30
 
Fecha de Ingreso: enero-2006
Ubicación: Madrid
Mensajes: 148
Antigüedad: 18 años, 10 meses
Puntos: 0
Estoy mirando ahora lo de On Error goto que no se utilizarlo, pero primero he ejecutado lo que me has mandado, y creo que lo de poner el HEAD no funciona porque me da un error que antes no me habia salido:
The server returned an invalid or unrecognized response

y el error lo da como no en objXMLHTTP.Send
  #10 (permalink)  
Antiguo 31/01/2006, 03:33
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 22 años, 10 meses
Puntos: 0
es muy posible

aunque de momento poniendo
on error resume next
dentro de la funcion me funciona

a si tb he sacado
Dim objXMLHTTP, strReturn, strHTML
Set objXMLHTTP = SErver.CreateObject("MSXML2.ServerXMLHTTP")
de la funcion, para no crear cada vez el objeto, con uno es suficiente.
  #11 (permalink)  
Antiguo 18/08/2006, 05:10
 
Fecha de Ingreso: agosto-2006
Mensajes: 316
Antigüedad: 18 años, 3 meses
Puntos: 0
como se arrreglo lo del objXMLHTTP.Send
  #12 (permalink)  
Antiguo 18/08/2006, 08:17
Avatar de JoshMex
Moderador Webhosting
 
Fecha de Ingreso: enero-2006
Mensajes: 4.057
Antigüedad: 18 años, 10 meses
Puntos: 166
Lo que veo también es que nunca liberas el RecordSet que creas.
__________________
JoshMex
Desarrollador Plataforma Microsoft / Windows / ASP / ASP.NET / SQL Server
Es inútil hacer cualquier cosa a prueba de tontos, porque los tontos son muy ingeniosos
  #13 (permalink)  
Antiguo 17/04/2012, 09:22
Avatar de liberacionanimal  
Fecha de Ingreso: abril-2011
Ubicación: Girona
Mensajes: 56
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Verificar si un link esta roto

Hola no entiendo nada de lo que decís pero me interesa el programa que detecta enlaces rotos salientes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:15.