On Apr 2, 2010, at 15:30, "Boris Perez Canedo" <inf200...@ucf.edu.cu>
wrote:
El 2 de abril de 2010 15:06, Jose Caballero
jcaballero....@gmail.com> escribió:
El 2 de abril de 2010 11:45, Boris Perez Canedo
inf200...@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 inte
resa.
Intuyo que puedo usar el método HEAD de HTTP que simplemente devuelv
e la metainformación contenida en el HEAD. En principio eso seria su
ficiente. 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 tip
o 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 ejem
plo 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ód
igo.
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
Ok, fue un placer.
Bueno, ahora me gustaria poder hacerlo con alguna libreria de python
para no tener que depender de que curl este instalado. En el hilo se
ha comentado urllib. Yo ya habia investigado esa via, pero sigo
teniendo el mismo problema: no estoy seguro de que el contenido de la
url no se esta descargando.
En cualquier caso, gracias por todo.
Jose
PS: perdon por la ausencia de tildes en este mensaje. Teclado
americano en este caso. _______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/