Je reçois une réponse "HTTP Error 500: Internal Server Error", mais je souhaite toujours lire les données dans le code d'erreur HTML.
Avec Python 2.6, je récupère normalement une page en utilisant:
import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()
Lorsque j'essaie de l'utiliser sur l'URL défaillante, j'obtiens 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 renvoyant des erreurs de serveur internes?
Notez qu'avec Python 3, l'exception correspondante est urllib.error.HTTPError
.
HTTPError
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()
Si 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 créer la demande. Fais juste
try:
resp = urllib2.urlopen(url)
print resp.read()
except urllib2.HTTPError, error:
print "ERROR: ", error.read()
ainsi, vous ne remplacez pas urllib2.HTTPError, vous gérez simplement l'exception.