Ver Mensaje Individual
  #13 (permalink)  
Antiguo 29/03/2013, 05:56
Avatar de dontexplain
dontexplain
 
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: ¿Excepción de redireccionamiento???

Cita:
Iniciado por razpeitia Ver Mensaje
Código Python:
Ver original
  1. import urllib2
  2. from urllib2 import HTTPError, URLError
  3.  
  4. url = "http://ma40.zxq.net/inexistente.txt"
  5. try:
  6.     archivo = urllib2.urlopen(url)
  7. except (HTTPError, URLError):
  8.     print """ERROR"""
  9. else:
  10.     if archivo.getcode() == 200 and archivo.geturl() == url:
  11.         print """CORRECTO"""
  12.     else:
  13.         print 'ERROR'

Buena suerte en lo que sea que estés haciendo.
Exacto. Comprobar la url del recurso actual y del primitivo (original) era una solución bastante fácil. No obstante, te dije de mirar el HTTPRedirectHandler y ni caso me hiciste.

La idea es que esa clase recibe una petición de urllib2 y la procesa. Su funcionamiento es sencillo, en primer lugar se crea un opener, el opener será la función que reciba el objeto de petición. Este objeto será un HTTPRedirectHandler.

El HTTPRedirectHandler, si el código de la respuesta es 301 llamará a la función http_error_301 con todos los parámetros. Si tú creas una clase hija puedes sobreescribir esa función para que cuando sea llamada haga lo que tú quieras, y de eso tratará, la idea es que cuando sea llamada no devuelva un objeto request sino un simple error.

Código Python:
Ver original
  1. import urllib2
  2. class redirigir(urllib2.HTTPRedirectHandler):
  3.     def http_error_301(self,req,fp,code,msg,headers):
  4.         return False
  5. try:
  6.     op = urllib2.build_opener(redirigir)
  7.     urllib2.install_opener(op)
  8.     r = urllib2.urlopen("http://ma40.zxq.net/reti.txt")
  9.     print r.read()
  10. except urllib2.HTTPError, e:
  11.     print "error"


Si el código fuera 301 llamaría a la función http_error_301, que devolvería False, por lo que sería automáticamente erróneo. Si el archivo no existiera la excepción sería HTTPError, e imprimiría error, si el código fuera correcto imprimiría la respuesta.

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor