LINUX.ORG.RU

python - как заставить urllib не вызывать exception?


0

1

есть страница, которая открывается в файрфоксе
при этом httpfox показывает что страница возвращена с кодом 422 Unknown error

а если качать эту страницу питоном, получаем эксепшен и страницу скачать нельзя:

resp = request.urlopen(r)

Traceback (most recent call last):
File «<stdin>», line 1, in <module>
File «/usr/local/lib/python3.2/urllib/request.py», line 138, in urlopen
return opener.open(url, data, timeout)
File «/usr/local/lib/python3.2/urllib/request.py», line 372, in open
response = meth(req, response)
File «/usr/local/lib/python3.2/urllib/request.py», line 484, in http_response
'http', request, response, code, msg, hdrs)
File «/usr/local/lib/python3.2/urllib/request.py», line 410, in error
return self._call_chain(*args)
File «/usr/local/lib/python3.2/urllib/request.py», line 344, in _call_chain
result = func(*args)
File «/usr/local/lib/python3.2/urllib/request.py», line 492, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 422: Unknown Error


вот, собственно, как заставить питон не умирать на этой ошибке?
файрфокс же может скачать страницу, несмотря на этот код в заголовке

Ответ на: комментарий от sergey-novikov

не знаком с urllib, но банальная логика подсказывает, что раз resp.read() кидает эксепшен, то его и надо совать в try/catch или хотя бы банально проверять не равен ли он null

marvin_yorke ★★★
()

«Urllib, именем короля, приказываю тебе не вызывать exception»
Вижу 2 варианта:
1) Используй другой модуль
2) Использую стороннюю утилиту (wget например)

Dragon59 ★★
()
Ответ на: комментарий от Dragon59

да у меня на урллиб свой класс построен, надо юзать его
неужели нельзя заставить урллиб не кидать эксепшены

sergey-novikov ★★★
() автор топика
Ответ на: комментарий от sergey-novikov

raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 422: Unknown Error

при этом httpfox показывает что страница возвращена с кодом 422 Unknown error

ничо не напоминает?

marvin_yorke ★★★
()

а что на странице? ведь если ошибка, то и данных не должно быть (я, правда, не сталкивался с 422 кодом ответа). может быть это сам фф формирует страницу, на которой говорит, что сервер вернул 422 код?

winlook38 ★★
()
Ответ на: комментарий от winlook38


в одном случае там страница отправки формы
в другом - с ошибкой 422 - та же форма, но с капчей

и вот надо получить эту форму с капчей, фф - это делает, а питон нет

sergey-novikov ★★★
() автор топика
Ответ на: комментарий от sergey-novikov

могу только предположить, что контент можно вытащить из параметров исключения. например exception urllib.ContentTooShortError(msg[, content]). только у вас исключение другое.

winlook38 ★★
()
Ответ на: комментарий от sergey-novikov

у проблемы появилось продолжение

раньше я получал хидеры так:

response.getheaders()

но теперь response не определен, есть только «e» от эксепшена
а у него .getheaders() нема.

подскажите как их получить?

sergey-novikov ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.