Python urllib2: Читання тексту вмісту навіть під час виключення HTTPError?


76

Я використовую urllib2 для отримання сторінки через HTTP. Іноді ресурс видає помилку HTTP 400 (поганий запит), коли мій запит містить помилку. Однак ця відповідь також містить елемент XML, який дає детальне повідомлення про помилку. Було б дуже зручно бачити цю помилку, а не лише виняток HTTPError, повернутий urllib2.

Як повернути вміст документа, незважаючи на виняток?


Відповіді:


53

Ви можете розглядати помилку як відповідь.

http://www.voidspace.org.uk/python/articles/urllib2.shtml#httperror

Коли виникає помилка, сервер відповідає, повертаючи код помилки HTTP та сторінку помилки. Ви можете використовувати екземпляр HTTPError як відповідь на повернуту сторінку. Це означає, що поряд із атрибутом коду він також має методи читання, geturl та info.


87
import urllib2
try:
    request = urllib2.Request('http://www.somesite.com')
    response = urllib2.urlopen(req)
except urllib2.HTTPError as e:
    error_message = e.read()
    print error_message

0

Ви можете readотримати відповідь із винятку HTTPError.

Приклад Python3

import urllib.request

try:
    request = urllib.request.Request('http://httpstat.us/418', headers={'Accept': 'text/plain', 'User-Agent': ''})
    with urllib.request.urlopen(request) as page:
        print('success: ' + page.read().decode())
except urllib.error.HTTPError as httpError:
        error = httpError.read().decode()
        print('error: ' + error)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.