Ruby open-uri redirigir prohibido
(3)
Eche un vistazo a la gema open_uri_redirections .
Parchea el OpenURI de Ruby para permitir redirecciones de HTTP a HTTPS o al revés.
Tengo este sencillo analizador html (para fines de aprendizaje) en el que he estado trabajando .:
require ''open-uri''
puts "Enter URL to parse HTML: "
url = gets.chomp
puts "Enter tag to parse from: "
tag = gets.chomp
response = open(url).read
title1 = response.index(tag)
title2 = response.index(tag.insert(1,''/'')) -1
result = response[(title1 + tag.length - 1)..title2]
print result
y cuando ingreso http://twitter.com
, http://twitter.com
este mensaje de error:
ERROR: `open_loop'': redirection forbidden: http://twitter.com -> https://twitter.com/ (RuntimeError)
from /usr/local/rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/open-uri.rb:149:in `open_uri''
from /usr/local/rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/open-uri.rb:704:in `open''
from /usr/local/rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/open-uri.rb:34:in `open''
from /home/ubuntu/workspace/htmlparse.rb:6:in `<main>''
¿Algún consejo o ayuda? Soy nuevo en Ruby y conozco otros módulos de análisis html, pero estoy haciendo esto para aprender los principios básicos de Ruby. Gracias.
Ruby 2.4 reparó redirecciones de actualización (desde http -> https) en open-uri
, así que ahora:
RUBY_VERSION
=> "2.4.2"
require ''open-uri''
=> true
open(''http://twitter.com'')
=> #<Tempfile:/tmp/open-uri20170926-24254-1kflwxq>
Fuente: http://blog.bigbinary.com/2017/03/02/open-uri-in-ruby-2-4-allows-http-to-https-redirection.html
También puede detectar la excepción y luego intentarlo de nuevo con la URL "https".
url = "http://classic.ona.io/api/v1/files/3538545?filename=gringgo/attachments/1485229166168.jpg"
uri = URI.parse(url)
tries = 3
begin
uri.open(redirect: false)
rescue OpenURI::HTTPRedirect => redirect
uri = redirect.uri # assigned from the "Location" response header
retry if (tries -= 1) > 0
raise
end