Detecta redirigir con ruby mecanize
http redirect (2)
Encontré una manera de permitir redirecciones y también obtener el código de estado, pero no estoy seguro de que sea el mejor método.
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
Estoy usando las gemas mechanize / nokogiri para analizar algunas páginas al azar. Estoy teniendo problemas con los redireccionamientos 301/302. Aquí hay un fragmento del código:
agent = Mechanize.new
page = agent.get(''http://example.com/page1'')
El servidor de prueba en mydomain.com redirigirá la página1 a la página2 con el código de estado 301/302, por lo tanto, esperaba tener
page.code == "301"
En cambio, siempre obtengo page.code == "200"
.
Mis requisitos son:
- Quiero que se sigan los redireccionamientos (comportamiento de mecanizado predeterminado, que es bueno)
- Quiero ser capaz de detectar que esa página fue en realidad redirigida
Sé que puedo ver la página 1 en agent.history
, pero eso no es confiable. Quiero el código de estado de redireccionamiento también.
¿Cómo puedo lograr este comportamiento con mechanize?
Puede dejar el redireccionamiento y simplemente seguir el encabezado de la ubicación:
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