2011-07-20 18 views
5

Tengo este código muy simple para verificar si un sitio está activo o inactivo.Python httplib2 Manejo de excepciones

import httplib2 
h = httplib2.Http() 
response, content = h.request("http://www.folksdhhkjd.com") 
if response.status == 200: 
    print "Site is Up" 
else: 
    print "Site is down" 

Cuando ingreso una URL válida, imprime correctamente Site is Up porque el estado es 200 como se esperaba. Pero, cuando ingreso una URL no válida, ¿no debería imprimirse? El sitio está inactivo? En su lugar se imprime una excepción algo como esto

Traceback (most recent call last): 
    File "C:\Documents and Settings\kripya\Desktop\1.py", line 3, in <module> 
    response, content = h.request("http://www.folksdhhkjd.com") 
    File "C:\Python27\lib\site-packages\httplib2\__init__.py", line 1436, in request 
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey) 
    File "C:\Python27\lib\site-packages\httplib2\__init__.py", line 1188, in _request 
    (response, content) = self._conn_request(conn, request_uri, method, body, headers) 
    File "C:\Python27\lib\site-packages\httplib2\__init__.py", line 1129, in _conn_request 
    raise ServerNotFoundError("Unable to find the server at %s" % conn.host) 
ServerNotFoundError: Unable to find the server at www.folksdhhkjd.com 

¿Cómo puedo anular esta excepción e imprimir mi costumbre define "El sitio está desactivado" mensaje? Cualquier orientación, por favor?

EDITAR

también una pregunta más ... ¿cuál es la diferencia entre usar

h = httplib2.Http('.cache') 

y

h = httplib2.Http() 

Respuesta

6
try: 
    response, content = h.request("http://www.folksdhhkjd.com") 
    if response.status==200: 
     print "Site is Up" 
except httplib2.ServerNotFoundError: 
    print "Site is Down" 

El problema con el código es que si el host no responde, la solicitud no devuelve CUALQUIER estado co de, y entonces la biblioteca arroja un error (creo que es una peculiaridad de la biblioteca, hacer algún tipo de resolución de DNS antes de intentar hacer la solicitud).

+0

wow el manejo básico de excepciones es lo que debería aprender ahora ... ¡Muchas gracias! –

4
h = httplib2.Http('.cache') 

cachés las cosas se recupera en un directorio llamado .cache así que si usted hace la misma petición en dos ocasiones no podría tener que conseguir realmente todo dos veces; un archivo que comienza con un punto está oculto en los sistemas de archivos POSIX (como en Linux).

h = httplib2.Http() 

no almacena en caché es resultados, así que hay que conseguir todo lo solicita cada vez.

+0

Ah, entonces ... parece mejor práctica usar 'h = httplib2.Http ('.cache')' luego. ¡Muchas gracias! –

+0

Voté las dos respuestas de todos modos. ¡Gracias! –

+0

Estoy intentando colocar a través de las direcciones URL con un archivo como este 'sf = abierto ('C:/Documents and Settings/usuario/Escritorio/1.txt', 'r') de línea en sf: activo = 0 de impresión "en URL actual es: \ t" + línea de intento: respuesta, contenido = h.request (línea) si Response.Status == 200: activa = 1 excepto httplib2.ServerNotFoundError: print "El sitio está caído" sf.close() ' Una de las URL en el archivo es http://www.fastbookmarking.info. El sitio está arriba. Revisé el código de estado y su 200 –