Override urllib2.HTTPError o urllib.error.HTTPError e la lettura HTML di risposta in ogni caso

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

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.

È stato utile?

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top