在ruby中,如果你使用机械化跟随301/302这样的重定向
require 'mechanize'
m = WWW::Mechanize.new
m.get('http://google.com')
如何获取机械化重定向的页面列表? (例如http://google.com => http://www.google.com => http://google.com.ua)
好的,这是机械化中负责重定向的代码
elsif res_klass <= Net::HTTPRedirection
return page unless follow_redirect?
log.info("follow redirect to: #{ response['Location'] }") if log
from_uri = page.uri
raise RedirectLimitReachedError.new(page, redirects) if redirects + 1 > redirection_limit
redirect_verb = options[:verb] == :head ? :head : :get
page = fetch_page( :uri => response['Location'].to_s,
:referer => page,
:params => [],
:verb => redirect_verb,
:redirects => redirects + 1
)
@history.push(page, from_uri)
return page
但是尝试m.history.map {| p | puts p.uri}显示了最后一页的uri的3倍..
答案 0 :(得分:2)
这里的关键是利用Mechanize中的内置日志记录。这是使用内置Rails日志记录工具的完整代码示例。
要求'机械化'
要求'logger'
mechanize_logger = Logger.new('log / mechanize.log')
mechanize_logger.level = Logger :: INFO
url ='http://google.com'
agent = Mechanize.new
agent.log = mechanize_logger
agent.get(URL)
然后检查日志目录中log / mechanize.log的输出,您将看到整个机械化过程,包括中间URL。
答案 1 :(得分:0)
我不确定,但这里有几件事要尝试:
在get()
m.history[i].uri
中的内容
您可能需要以下内容:
for m.redirection_limit in 0..99 begin m.get(url) break rescue WWW::Mechanize::RedirectLimitReachedError # code here could get control at # intermediate redirection levels end end