Получение и перехват HTTP-ответа с использованием Mechanize в Python - PullRequest
11 голосов
/ 20 апреля 2010

Я пытаюсь получить коды ответов от Mechanize в python. Хотя я могу получить 200 кодов состояния, все остальное не возвращается (404 броска и исключение, а 30x игнорируется). Есть ли способ получить исходный код состояния?

Спасибо

Ответы [ 2 ]

13 голосов
/ 20 апреля 2010

Ошибки вызовут исключение, поэтому просто используйте 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
0 голосов
/ 08 августа 2011

В твил, сделай get_browser().get_code()

twill - это выдающийся уровень автоматизации и тестирования, построенный на основе механизации, облегчающий использование. Это очень удобно.

...