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

S� que es un conjunto conocido de n�meros (c'odigos de estado del
protocolo http), no los "conozco" todos habr�a que investigarlos, pero
s� 200 significa que est� bien, por ejemplo si la memoria no me falla 407
significa que no tienes autorizaci�n, el 503 de tu ejemplo tiene una descripcion
a continua�ci�n "Service Unavailable" que me parece muy
expl'icita, o sea, la url tiene que estar mal, y es cierto almenos en tu 
ejemplo www.google.comm�

Revisa esta
direcci�n http://en.wikipedia.org/wiki/List_of_HTTP_status_codes,
estoy en la escuela y mi conexi�n es bastante lenta.

Saludos,
Boris.







---
La mejor vacuna contra el virus A(H1N1) es la higiene personal
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a