Получение и удаление HTTP-ответа с помощью Mechanize в Python
Я пытаюсь получить коды ответов от Mechanize в python. Хотя я могу получить код состояния 200, ничего другого не возвращается (404 броска и исключение и 30x игнорируются). Есть ли способ получить исходный код состояния?
Спасибо
Ответ 1
Ошибки выдадут исключение, поэтому просто используйте try:... кроме:... для их обработки.
В вашем объекте браузера Mechanize есть метод set_handle_redirect(), который можно использовать для включения или выключения перенаправления 30x. Отключите его, и вы получите сообщение об ошибке для переадресаций, которые вы обрабатываете, как будто вы обрабатываете любую другую ошибку:
>>> from mechanize import Browser
>>> browser = Browser()
>>> resp = browser.open('http://www.oxfam.com') # this generates a redirect
>>> resp.geturl()
'http://www.oxfam.org/'
>>> browser.set_handle_redirect(False)
>>> resp = browser.open('http://www.oxfam.com')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build\bdist.win32\egg\mechanize\_mechanize.py", line 209, in open
File "build\bdist.win32\egg\mechanize\_mechanize.py", line 261, in _mech_open
mechanize._response.httperror_seek_wrapper: HTTP Error 301: Moved Permanently
>>>
>>> from urllib2 import HTTPError
>>> try:
... resp = browser.open('http://www.oxfam.com')
... except HTTPError, e:
... print "Got error code", e.code
...
Got error code 301
Ответ 2
В twill, do get_browser().get_code()
twill - это выдающийся модуль автоматизации и тестирования, построенный на основе механизации, чтобы упростить его использование. Это очень удобно.