Cita:
Iniciado por razpeitia
Código Python:
Ver originalimport urllib2
from urllib2 import HTTPError, URLError
url = "http://ma40.zxq.net/inexistente.txt"
try:
archivo = urllib2.urlopen(url)
except (HTTPError, URLError):
print """ERROR"""
else:
if archivo.getcode() == 200 and archivo.geturl() == url:
print """CORRECTO"""
else:
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 originalimport urllib2
class redirigir(urllib2.HTTPRedirectHandler):
def http_error_301(self,req,fp,code,msg,headers):
return False
try:
op = urllib2.build_opener(redirigir)
urllib2.install_opener(op)
r = urllib2.urlopen("http://ma40.zxq.net/reti.txt")
print r.read()
except urllib2.HTTPError, e:
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.