2011-10-17 72 views
2

我有一個公共代理列表,我從網上刮過,但其中許多實際上並不可連接。我想用Ruby來過濾這個列表。如何檢查代理是否可以在Ruby中連接?

我該如何創建一個函數,使得如果我可以成功連接到代理時返回true,否則返回false?

這裏的總體思路:

def connectable?(proxy) 
    ip, port = proxy.split(':') 
    return true if connect(ip, port) == success 
    false 
end 
+0

連接從哪裏來? –

回答

2

你可以用 '平' 庫:

require 'net/ping' 

def connectable?(proxy) 
    host, port = proxy.split(':') 
    return Net::Ping::TCP.new(host, port).ping 
end 

如果你必須使用IP地址而不是主機名, 'Resolv.getname()' 'resolve'模塊的方法可以幫助你

+0

Net :: Ping :: TCP類在TCPSocket上工作。就像在文檔中說的那樣:「使用TCP ping只需要嘗試打開一個連接,如果我們成功了,就假設成功。」 – WarHog

+0

但它不連接到代理使用的相同端口。它僅確定主機是否在那裏,而不是代理服務器。 – EJP

+0

主題啓動者寫道:「如果我可以成功連接到代理服務器,它們中的許多實際上不可連接...」。片段中的代碼建立與給定端口上的給定主機的TCP連接(它可以是任何端口)。如果我錯誤或誤解了問題規範,請糾正我。 – WarHog

3

只要嘗試像你一樣連接到它,不要忘記關閉連接,如果成功。 Ping沒有測試正確的東西。