Recibo una respuesta 'HTTP Error 500: Internal Server Error', pero aún quiero leer los datos dentro del error HTML.Anulando urllib2.HTTPError o urllib.error.HTTPError y leyendo HTML de todas formas respuesta
con Python 2.6, que normalmente obtener una página usando:
import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()
al intentar utilizar esto en la URL en su defecto, consigo la excepción urllib2.HTTPError
:
urllib2.HTTPError: HTTP Error 500: Internal Server Error
¿Cómo puedo ir a buscar tales páginas de error (con o sin urllib2
), todo mientras devuelven errores internos del servidor?
Tenga en cuenta que con Python 3, la excepción correspondiente es urllib.error.HTTPError
.
Una vez que hemos hecho error.read(), error.read() posteriormente devuelve cadena vacía. A veces esto arruina el código en otro lugar. ¿Cómo podemos devolver cortésmente el contenido del error a los demás? –
@Matt Nunca lo he intentado, pero como es un objeto similar a un archivo, es posible que pueda hacer un 'error.seek (0)' para restablecer el "puntero al archivo" al comienzo de la transmisión. No todos los objetos de tipo archivo son necesarios para implementar la parte de acceso aleatorio de la interfaz de E/S, por lo que no estoy seguro de si funciona. Si no es así, podría considerar hacer esta pregunta en su propia pregunta para que pueda acceder a una audiencia más grande. –
Tenga en cuenta que en casos degenerados, HTTPError puede no comportarse como un objeto similar a un archivo. Verifique que read() esté disponible con hasattr. – ron