Override urllib2.HTTPError o urllib.error.HTTPError e la lettura HTML di risposta in ogni caso
-
19-09-2019 - |
Domanda
ricevo un 'Errore HTTP 500: Errore interno del server' di risposta, ma ho ancora voglia di leggere i dati all'interno del codice HTML di errore
.Con Python 2.6, io di solito prendere una pagina utilizzando:
import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()
Quando si tenta di utilizzare questo sull'URL in mancanza, ho la urllib2.HTTPError
eccezione:
urllib2.HTTPError: HTTP Error 500: Internal Server Error
Come posso recuperare tali pagine di errore (con o senza urllib2
), il tutto mentre stanno tornando errori del server interno?
Si noti che con Python 3, corrispondente eccezione è urllib.error.HTTPError
.
Soluzione
Il HTTPError
è un oggetto simile a file . Si può prendere e poi read
il suo contenuto.
try:
resp = urllib2.urlopen(url)
contents = resp.read()
except urllib2.HTTPError, error:
contents = error.read()
Altri suggerimenti
Se vuoi dire che si desidera leggere il corpo del 500:
request = urllib2.Request(url, data, headers)
try:
resp = urllib2.urlopen(request)
print resp.read()
except urllib2.HTTPError, error:
print "ERROR: ", error.read()
Nel tuo caso, non è necessario per costruire la richiesta. Basta fare
try:
resp = urllib2.urlopen(url)
print resp.read()
except urllib2.HTTPError, error:
print "ERROR: ", error.read()
così, non ignorare urllib2.HTTPError, basta gestire l'eccezione.
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()