Ich erhalte die Antwort "HTTP-Fehler 500: Interner Serverfehler", möchte jedoch weiterhin die Daten im Fehler-HTML lesen.
Mit Python 2.6 rufe ich normalerweise eine Seite ab mit:
import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()
Beim Versuch, dies für die fehlerhafte URL zu verwenden, wird die Ausnahme angezeigt urllib2.HTTPError
:
urllib2.HTTPError: HTTP Error 500: Internal Server Error
Wie kann ich solche Fehlerseiten (mit oder ohne urllib2
) abrufen, während sie interne Serverfehler zurückgeben?
Beachten Sie, dass bei Python 3 die entsprechende Ausnahme lautet urllib.error.HTTPError
.
python
urllib2
urllib
http-error
backus
quelle
quelle
error.seek(0)
den "Dateizeiger" auf den Anfang des Streams zurücksetzen. Nicht jedes dateiähnliche Objekt ist erforderlich, um den Direktzugriffsteil der E / A-Schnittstelle zu implementieren. Daher ist nicht sicher, ob es funktioniert. Wenn dies nicht der Fall ist, können Sie dies in einer eigenen Frage stellen, um ein größeres Publikum anzusprechen.seek()
können.Wenn Sie meinen, Sie möchten 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 die Anforderung nicht erstellen. Mach einfach
try: resp = urllib2.urlopen(url) print resp.read() except urllib2.HTTPError, error: print "ERROR: ", error.read()
Sie überschreiben also nicht urllib2.HTTPError, sondern behandeln nur die Ausnahme.
quelle
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()
quelle
err.reason
bietet nicht die gleichen Informationen, dieerr.read()
bietet. Letzteres kann insbesondere nützlich sein.