2016-03-17 2 views
1

У меня есть программа, которую я использую для целей тестирования, что я делаю, это очистка веб-страниц для открытых прокси-серверов и запись их в журнал, однако это очень разные тип прокси-скребок, так как он создает кучу случайных прокси перед внутри файла перед выполнением, например:Ошибка при открытии 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. Означает ли это, что прокси-сервер недействителен, и если есть способ пропустить строку в файле? Возможно, используя next или skip?
  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) 

EDIT:

мне сказали, чтобы попытаться 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 lib не любит новую строку. Просто замените

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

с

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

String#chomp будет отрезан любой символ новой строки в конце строки.

+0

Ты мой господин и спаситель! Я полностью забыл о '.chomp' lol, спасибо вам большое! – 13aal

Смежные вопросы