Anulando urllib2.HTTPError o urllib.error.HTTPError y la lectura de HTML respuesta de todos modos

StackOverflow https://stackoverflow.com/questions/2233687

Pregunta

Recibo un 'HTTP Error 500: Error interno del servidor' respuesta, pero todavía quiero leer los datos dentro del HTML de error

.

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 el urllib2.HTTPError excepción:

urllib2.HTTPError: HTTP Error 500: Internal Server Error

¿Cómo puedo ir a buscar este tipo de páginas de error (con o sin urllib2), a la vez que están regresando errores internos del servidor?

Tenga en cuenta que con Python 3, la excepción correspondiente es urllib.error.HTTPError.

¿Fue útil?

Solución

El HTTPError href="https://docs.python.org/3/library/urllib.error.html#urllib.error.HTTPError" rel="nofollow noreferrer"> es un objeto de tipo fichero . Puedes cogerlo y luego read su contenido.

try:
    resp = urllib2.urlopen(url)
    contents = resp.read()
except urllib2.HTTPError, error:
    contents = error.read()

Otros consejos

Si usted quiere decir que desea leer el cuerpo de la 500:

request = urllib2.Request(url, data, headers)
try:
        resp = urllib2.urlopen(request)
        print resp.read()
except urllib2.HTTPError, error:
        print "ERROR: ", error.read()

En su caso, no es necesario para construir la petición. Sólo haz

try:
        resp = urllib2.urlopen(url)
        print resp.read()
except urllib2.HTTPError, error:
        print "ERROR: ", error.read()

Por lo tanto, usted no anula urllib2.HTTPError, sólo controla la excepción.

alist=['http://someurl.com']

def testUrl():
    errList=[]
    for URL in alist:
        try:
            urllib2.urlopen(URL)
        except urllib2.URLError, err:
            (err.reason != 200)
            errList.append(URL+" "+str(err.reason))
            return URL+" "+str(err.reason)
    return "".join(errList)

testUrl()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top