[Python-es] validar accesibilidad a una URL sin hacer "download"

Jose Caballero jcaballero.hep en gmail.com
Vie Abr 2 21:06:48 CEST 2010


El 2 de abril de 2010 11:45, Boris Perez Canedo <inf200523 en ucf.edu.cu>escribió:

> Hola,
>
> quisiera poder comprobar que una determinada URL existe y es accesible,
> pero sin 'descargar' su contenido, simplemente comprobar que el server está
> activo, que el usuario no ha escrito mal la URL (sin 'typos'), etc., pero
> sin tener que descargar su contenido. Podría hacer un simple wget the la URL
> y ver si funciona, pero no me interesa.
>
> Intuyo que puedo usar el método HEAD de HTTP que simplemente devuelve la
> metainformación contenida en el HEAD. En principio eso seria suficiente.
> Ejemplo:
>
> $ curl --head http://www.google.com
> HTTP/1.0 200 OK
> Date: Fri, 02 Apr 2010 15:00:37 GMT
> Expires: -1
> Cache-Control: private, max-age=0
> Content-Type: text/html; charset=ISO-8859-1
> Set-Cookie:
> PREF=ID=09c3639ccf643ace:TM=1270220437:LM=1270220437:S=lY6HpKCqZ3lZEW9_;
> expires=Sun, 01-Apr-2012 15:00:37 GMT; path=/; domain=.google.com
> Set-Cookie:
> NID=33=i_y0e-Tq2pAw8HxXMzD3KeH_H4Lqve81UH1WT_kQAwdJnRd0paMJz4KMZcp2cr1JqY35AkjVwYfK2UbPtlu_-9k4R0nFAuGe93JmxxebhGSdDtAxngWmq-FgfWELdfp0;
> expires=Sat, 02-Oct-2010 15:00:37 GMT; path=/; domain=.google.com;
> HttpOnly
> Server: gws
> X-XSS-Protection: 0
> X-Cache: MISS from httpproxy4.bnl.vip
> X-Cache-Lookup: MISS from httpproxy4.bnl.vip:3128
> Proxy-Connection: close
>
> $ curl --head http://www.google.comm
> HTTP/1.0 503 Service Unavailable
> Server: squid/3.0.STABLE8
> Mime-Version: 1.0
> Date: Fri, 02 Apr 2010 15:08:02 GMT
> Content-Type: text/html
> Content-Length: 1823
> Expires: Fri, 02 Apr 2010 15:08:02 GMT
> X-Squid-Error: ERR_DNS_FAIL 0
> X-Cache: MISS from httpproxy4.bnl.vip
> X-Cache-Lookup: MISS from httpproxy4.bnl.vip:3128
> Proxy-Connection: close
>
> Pero de esta forma es necesario hacer demasiado 'parsing', y no siempre la
> primera línea contiene "OK" aunque la URL sea válida. No tengo demasiado
> claro cómo puedo validar la URL a partir de este tipo de resultados.
>
> He estado mirando un poco las clases urllib y urllib2, pero no acabo de ver
> cómo puedo hacer la validación sin que el contenido de la URL se descargue
> cuando existe. Si alguien tiene algún 'link' a un ejemplo de cómo validar
> una URL sin necesidad de descargar su contenido, válido para python2.3,
> estaré eternamente agradecido.
>
>
> Muchas gracias. Saludos cordiales,
>
> Jose
>
> Hola Jose,
>
> la primera linea no siempre contiene OK, pero no puedes obtener el código
> de respuesta e interpretarlo?
>
> En el primer caso el código es 200
> y en el segundo 503, utiliza las expresiones regulares.
>
> Ejemplo:
> (HTTP/\d\.\d)\s(\d{3})
> en el grupo 1 tienes la versión del protocolo y en el grupo 2 el código.
>
> import re
> reobj = re.compile(r"(HTTP/\d\.\d)\s(\d{3})")
>
> match = reobj.search(primera_linea)
>
> if match:
>        version = match.group(1)
>        codigo = match.group(2)
>
>
>
> Saludos,
> Boris.
>
>
Hola Boris,

eso podría valer. ¿Es siempre 200 cuando todo va bien? Si es siempre el
mismo número, o al menos un conjunto conocido de números, eso me vale.


Gracias,
Jose
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100402/2cb17175/attachment.html>


Más información sobre la lista de distribución Python-es