Переопределение urllib2.HTTPError или urllib.error.HTTPError и чтение HTML-ответа в любом случае
-
19-09-2019 - |
Вопрос
Я получаю сообщение "HTTP Error 500:Ответ "Внутренняя ошибка сервера", но я все еще хочу прочитать данные внутри HTML-кода ошибки.
В Python 2.6 я обычно извлекаю страницу, используя:
import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()
При попытке использовать это для неверного URL-адреса я получаю исключение urllib2.HTTPError
:
urllib2.HTTPError: HTTP Error 500: Internal Server Error
Как я могу получить такие страницы с ошибками (с или без urllib2
), и все это время они возвращают Внутренние ошибки сервера?
Обратите внимание, что в Python 3 соответствующее исключение равно urllib.error.HTTPError
.
Решение
Тот Самый HTTPError
является файлоподобным объектом.Ты можешь поймать его, и тогда read
его содержание.
try:
resp = urllib2.urlopen(url)
contents = resp.read()
except urllib2.HTTPError, error:
contents = error.read()
Другие советы
Если вы имеете в виду, что хотите прочитать тело 500:
request = urllib2.Request(url, data, headers)
try:
resp = urllib2.urlopen(request)
print resp.read()
except urllib2.HTTPError, error:
print "ERROR: ", error.read()
В вашем случае вам не нужно создавать запрос.Просто делать
try:
resp = urllib2.urlopen(url)
print resp.read()
except urllib2.HTTPError, error:
print "ERROR: ", error.read()
поэтому вы не переопределяете urllib2.HTTPError, вы просто обрабатываете исключение.
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()