web-dev-qa-db-fra.com

Ruby redirection open-uri interdite

J'ai ce simple analyseur html (à des fins d'apprentissage) sur lequel je travaille:

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 

et quand je saisis http://Twitter.com, J'obtiens ce message d'erreur:

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>' 

Un conseil ou une aide? Je suis nouveau à Ruby et je connais d'autres modules d'analyse html, mais je fais cela pour apprendre les bases de Ruby. Merci.

35
Vikaton

Jetez un œil à la gemme open_uri_redirections .

Il corrige OpenURI de Ruby pour permettre les redirections de HTTP vers HTTPS ou l'inverse.

30
fivedigit

Vous pouvez également intercepter l'exception, puis réessayer avec l'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

Source: https://twin.github.io/improving-open-uri/

16
kayn

Redirection de mise à niveau fixe de Ruby 2.4 (depuis http -> https) dans open-uri, alors maintenant:

Ruby_VERSION
=> "2.4.2"

require 'open-uri'
=> true

open('http://Twitter.com')
=> #<Tempfile:/tmp/open-uri20170926-24254-1kflwxq>

Source: http://blog.bigbinary.com/2017/03/02/open-uri-in-Ruby-2-4-allows-http-to-https-redirection.html

4
MatzFan