Переопределение urllib2.HTTPError или urllib.error.HTTPError и чтение ответа HTML в любом случае

Я получаю ответ «Ошибка HTTP 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 .

  • Базовая аутентификация HTTP не работает с urllib2 в python
  • Как надежно обрабатывать веб-данные в Python
  • gaierror: Имя или услуга неизвестны
  • Как отправить настраиваемый заголовок с urllib2 в HTTP-запросе?
  • Python: HTTP Опубликовать большой файл с потоковой передачей
  • urllib2 возвращает 404 для веб-сайта, который отлично отображает браузеры
  • Python `urllib2`: Почему я получаю ошибку 403, когда я` urlopen` на странице Википедии?
  • Несколько (асинхронных) соединений с urllib2 или другой библиотекой http?
  • 3 Solutions collect form web for “Переопределение urllib2.HTTPError или urllib.error.HTTPError и чтение ответа HTML в любом случае”

    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() 
    Python - лучший язык программирования в мире.