72 votes

Substituant urllib2 erreur http et en lisant la réponse HTML en tout cas

Je suis en train de l’écran gratter plusieurs pages d’un site Web, qui renvoient une « erreur HTTP 500 : Internal Server Error' réponse, mais encore donner des données importantes à l’intérieur de l’erreur HTML.

Normalement, je voudrais chercher une page à l’aide de ce (Python 2.6.4) :

Mais lorsque vous essayez de l’utiliser sur mon url actuelle, j’obtiens :

Comment puis-je récupérer ces pages d’erreur (avec ou sans urllib2), tous alors qu’ils retournent des erreurs de serveur interne ?

136voto

Joe Holloway Points 11122

Le [est un objet de type fichier](http://docs.python.org/library/urllib2.html#urllib2.HTTPError). Vous pouvez l’attraper, puis son contenu.

9voto

sberry Points 28742

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 créer la demande. Il suffit de faire

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

alors, vous ne remplacez pas urllib2.HTTPError, vous ne gérez que l’exception.

-2voto

Nikhil Dinesh Points 1412

Essaye ça,

 import urllib2
url = "<url here>"
request = urllib2.Request(url)
data = urllib2.urlopen(request)
document = data.read()
 

Ou utilisez les commandes ci-dessous dans l'invite de commande si vous utilisez des serveurs proxy.

export HTTP_PROXY = yourProxy: numéro de port;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X