2016-03-17 1 views
1

J'ai un programme que j'utilise à des fins de test que je suis en train de gratter le web pour les proxies ouverts, et l'enregistrement des informations d'entre eux, mais c'est un type très différent de scraper proxy, car il crée un tas de procurations au hasard avant à l'intérieur d'un fichier avant d'exécuter par exemple:Open-URI throw thru error => (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 

ce que je veux faire avec cette « proxy possible » est ouvert et voir si cela fonctionne, cependant quand j'utilise le code suivant, il jette juste cette erreur:

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

J'ai deux questions:

  1. Est-ce que cela signifie que le proxy est invalide, et si oui, y at-il un moyen d'ignorer la ligne dans le fichier? Peut-être en utilisant un next ou skip?
  2. Si cela ne veut pas dire que le proxy est invalide, alors qu'est-ce que cela signifie, est-ce que je fais quelque chose de mal dans mon code à l'endroit où il lit l'URL mal?

erreur complète:

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:

On m'a dit d'essayer URI.parse et je reçois la même erreur:

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

Je suis complètement déconcerté, 'http: //189.96.49.87: 7990' est un URI parfaitement valide. Que se passe-t-il lorsque vous essayez 'URI.parse (" http: // # {proxy} ")'? – Shelvacu

+0

@shelvacu Je ne sais pas laissez-moi savoir très vite – 13aal

+0

@shelvacu Je l'ai essayé avec une autre IP C: /Ruby22/lib/ruby/2.2.0/uri/rfc3986_parser.rb: 66: dans 'split ': mauvais URI (n'est pas URI ?): http://195.239.61.210:4365 (URI :: InvalidURIError) – 13aal

Répondre

3

Lorsque vous itérer sur chaque ligne en ruby ​​en utilisant #each_line, il vous donne chaque ligne y compris la nouvelle ligne. La librairie URI de Ruby n'aime pas la nouvelle ligne. Il suffit de remplacer

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

avec

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

String#chomp coupera les sauts de ligne à la fin de la chaîne.

+0

Vous êtes mon seigneur et sauveur! J'ai complètement oublié le '.chomp' lol merci beaucoup! – 13aal