Frage

Ich erhalte einen ‚HTTP-Fehler 500: Interner Serverfehler‘. Antwort, aber ich will noch die Daten innerhalb der Fehler HTML lesen

Mit Python 2.6, hole ich normalerweise eine Seite mit:

import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()

Beim Versuch, diese auf die fehlerhafte URL zu verwenden, habe ich die Ausnahme urllib2.HTTPError bekommen:

urllib2.HTTPError: HTTP Error 500: Internal Server Error

Wie kann ich eine solche Fehlerseiten holen (mit oder ohne urllib2), alle während sie Internal Server-Fehler zurückgeben?

Beachten Sie, dass mit Python 3, die entsprechende Ausnahme ist urllib.error.HTTPError.

War es hilfreich?

Lösung

Die HTTPError ist eine dateiähnliche Objekt . Sie können es fangen und dann seinen Inhalt read.

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

Andere Tipps

Wenn Sie meinen, Sie wollen den Körper des 500 lesen:

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

In Ihrem Fall müssen Sie nicht die Anforderung aufzubauen. Just do

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

so, nicht wahr urllib2.HTTPError außer Kraft setzen, die Sie gerade die Ausnahme behandeln.

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()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top