Обнаружение перенаправления с механикой рубина
Я использую machize/nokogiri gems для разбора некоторых случайных страниц. У меня проблемы с перенаправлением 301/302. Вот фрагмент кода:
agent = Mechanize.new
page = agent.get('http://example.com/page1')
Сервер тестирования на mydomain.com перенаправит страницу1 на страницу2 с кодом статуса 301/302, поэтому я ожидал, что у вас будет
page.code == "301"
Вместо этого я всегда получаю page.code == "200"
.
Мои требования:
- Я хочу, чтобы выполнялись переадресации (по умолчанию механизированное поведение, что хорошо)
- Я хочу, чтобы можно было обнаружить, что страница была перенаправлена.
Я знаю, что я вижу страницу1 в agent.history
, но это ненадежно. Мне также нужен код статуса перенаправления.
Как я могу добиться такого поведения с помощью механизации?
Ответы
Ответ 1
Вы можете оставить перенаправление и просто следить за заголовком местоположения:
agent.redirect_ok = false
page = agent.get 'http://www.google.com'
status_code = page.code
while page.code[/30[12]/]
page = agent.get page.header['location']
end
Ответ 2
Я нашел способ разрешить перенаправления, а также получить код состояния, но я не уверен, что это лучший метод.
agent = Mechanize.new
# deactivate redirects first
agent.redirect_ok = false
status_code = '200'
error_occurred = false
# request url
begin
page = agent.get(url)
status_code = page.code
rescue Mechanize::ResponseCodeError => ex
status_code = ex.response_code
error_occurred = true
end
if !error_occurred && status_code != '200' then
# enable redirects and request the page again
agent.redirect_ok = true
page = agent.get(url)
end