Redéfinition urllib2.HTTPError ou urllib.error.HTTPError et lire la réponse HTML de toute façon
-
19-09-2019 - |
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
.
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()