Open-uri throw错误=> (URI :: InvalidURIError)

时间:2016-03-17 17:38:07

标签: ruby proxy open-uri

我有一个程序,我用于测试目的,我正在做的是为开放代理抓取网页,并记录它们的信息,但这是一种非常不同类型的代理刮刀,如它在执行之前在文件内部之前创建了一堆随机代理,例如:

def create_possibles
  puts "Creating random possible proxies..".green.bold
  1.times do 
    port = rand(2000..8080)
    1.times do 
      ip = Array.new(4){rand(256)}.join('.')
      possible_proxy = "#{ip}:#{port}"
      File.open("possible_proxies.txt", "a") {|s| s.puts(possible_proxy)}
    end
  end
end
#<= 189.96.49.87:7990

我想要做什么&#34;可能的代理&#34;打开它,看看它是否有效,但是当我使用下面的代码时,它只会抛出错误:

def check_possibles
  IO.read("possible_proxies.txt").each_line do |proxy|
    puts open('http://google.com', :proxy => "http://#{proxy}")
  end
end

我有两个问题:

  1. 这是否意味着代理无效,如果有,是否有办法跳过文件中的行?可能使用nextskip
  2. 如果这并不意味着代理无效,那么它是什么意思,我在代码中做错了什么,它在哪里读错了网页?
  3. 完整错误:

    C:/Ruby22/lib/ruby/2.2.0/uri/rfc3986_parser.rb:66:in `split': bad URI(is not URI
    ?): http://189.96.49.87:7990 (URI::InvalidURIError)
    

    修改

    有人告诉我试试URI.parse我会得到同样的错误:

    C:/Ruby22/lib/ruby/2.2.0/uri/rfc3986_parser.rb:66:in `split': bad URI(is not URI
    ?): http://195.239.61.210:4365 (URI::InvalidURIError) #<= Different IP
    

1 个答案:

答案 0 :(得分:3)

当您使用#each_line遍历ruby中的每一行时,它会为您提供每行,包括换行符。 Ruby的lib lib不像换行符。只需更换

:proxy => "http://#{proxy}"

:proxy => "http://#{proxy.chomp}"

String#chomp会切断字符串末尾的任何换行符。