Aufschalten urllib2.HTTPError oder urllib.error.HTTPError und Lese Antwort HTML sowieso
-
19-09-2019 - |
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
.
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()