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

Jose Caballero jcaballero.hep en gmail.com
Dom Abr 4 18:00:18 CEST 2010


>
> 2010/4/2 Jose Caballero <jcaballero.hep en gmail.com>
>
>>
>>
>> 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.
>>
>>
>>


El 4 de abril de 2010 11:36, necudeco <necudeco en gmail.com> escribió:
NO Siempre.

Por ejemplo con las url amigables, cuando envias una url inexistente el
sistema te devuelve una pagina que visualmente es 404, pero el codigo http
que te envia es 200

Saludos



Hola,
¿Te  refieres a cosas como tinyurl.com? Hmmm, algo a tener en cuenta, sin
duda. Gracias por el comentario.


Jose
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100404/00f3ef43/attachment.html>


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