Redéfinition urllib2.HTTPError ou urllib.error.HTTPError et lire la réponse HTML de toute façon

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

Question

Je reçois une « erreur HTTP 500: Erreur interne du serveur » réponse, mais je veux quand même lire les données à l'intérieur du HTML d'erreur

.

Avec Python 2.6, je vais chercher normalement une page en utilisant:

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

Lorsque vous tentez d'utiliser sur l'URL à défaut, je reçois l'exception urllib2.HTTPError:

urllib2.HTTPError: HTTP Error 500: Internal Server Error

Comment puis-je récupérer ces pages d'erreur (avec ou sans urllib2), tout en leur retour des erreurs internes du serveur?

Notez qu'avec Python 3, l'exception correspondante est urllib.error.HTTPError.

Était-ce utile?

La solution

Le HTTPError href="https://docs.python.org/3/library/urllib.error.html#urllib.error.HTTPError" rel="nofollow noreferrer"> est un objet de type fichier . Vous pouvez l'attraper puis read son contenu.

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

Autres conseils

Si vous voulez dire que vous voulez lire le corps du 500:

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

Dans votre cas, vous n'avez pas besoin de construire la demande. Il suffit de faire

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

, vous ne remplacez pas urllib2.HTTPError, vous gérer simplement l'exception.

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top