2016-03-17 58 views
1

我有一個程序,我用於測試目的,我正在做的是爲web開放代理,並記錄他們的信息,但是這是一個非常不同類型的代理刮刀的,因爲它例如在執行前創建了一堆文件裏面前隨機代理:Open-uri拋出錯誤=>(URI :: InvalidURIError)

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 

我想與「可能代理」要做的就是打開它,看看它的工作原理,但是當我使用下面的代碼它只是拋出該錯誤:

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. 如果這並不意味着代理無效,那麼它是什麼意思,我在我的代碼中做錯了什麼,它在哪裏讀取url錯誤?

完整的錯誤:

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

我完全不解,'http://189.96.49.87:7990'是一個完全有效的URI。當你嘗試'URI.parse(「http://#{proxy}」)'時會發生什麼? – Shelvacu

+0

@shelvacu我不知道讓我發現真的很快 – 13aal

+0

@shelvacu我試着用不同的IP C:/Ruby22/lib/ruby/2.2.0/uri/rfc3986_parser.rb:66:在'split'中:壞的URI(不是URI ?):http://195.239.61.210:4365(URI :: InvalidURIError) – 13aal

回答

3

當你迭代在每一行上在紅寶石使用#each_line,它給你每行,包括換行。 Ruby的URI庫不像新行。只需更換

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

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

String#chomp將切斷任何換行符在字符串的結尾。

+0

你是我的主和救星!我完全忘了'.chomp'哈哈非常感謝你! – 13aal

相關問題