我使用mechanize / nokogiri宝石来解析一些随机页面。我遇到301/302重定向问题。以下是代码片段:
agent = Mechanize.new
page = agent.get('http://example.com/page1')
mydomain.com上的测试服务器会将page1重定向到带有301/302状态代码的page2,因此我原本希望
page.code == "301"
相反,我总是得到page.code == "200"
。
我的要求是:
我知道我可以在agent.history
中看到page1,但这不可靠。我也想要重定向状态代码。
如何使用mechanize实现此行为?
答案 0 :(得分:22)
您可以关闭重定向并继续关注位置标题:
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
答案 1 :(得分:3)
我找到了一种允许重定向并获取状态代码的方法,但我不确定这是最好的方法。
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