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

Jose Caballero jcaballero.hep en gmail.com
Vie Abr 2 21:10:01 CEST 2010


El 2 de abril de 2010 15:06, Jose Caballero <jcaballero.hep en gmail.com>escribió:

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

Me respondo yo mismo:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html


Muchas gracias por todo.
Saludos,
Jose
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100402/df15c991/attachment.html>


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