Anulando urllib2.HTTPError o urllib.error.HTTPError y la lectura de HTML respuesta de todos modos
-
19-09-2019 - |
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
.
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()