Ответ 1
Вы можете использовать класс Ping
.
require 'resolv-replace'
require 'ping'
def internet_connection?
Ping.pingecho "google.com", 1, 80
end
Метод возвращает true
или false
и не вызывает исключений.
Просто спросил, как проверить, существует ли интернет-соединение с помощью javascript и получил отличные ответы. Какой самый простой способ сделать это в Ruby? При попытке сделать сгенерированный код разметки html максимально чистым, я бы хотел условно отобразить тег script для файлов javascript в зависимости от того, является ли состояние Интернета. Что-то вроде (это HAML):
- if internet_connection?
%script{:src => "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", :type => "text/javascript"}
- else
%script{:src => "/shared/javascripts/jquery/jquery.js", :type => "text/javascript"}
Вы можете использовать класс Ping
.
require 'resolv-replace'
require 'ping'
def internet_connection?
Ping.pingecho "google.com", 1, 80
end
Метод возвращает true
или false
и не вызывает исключений.
require 'open-uri'
def internet_connection?
begin
true if open("http://www.google.com/")
rescue
false
end
end
Это ближе к тому, что ищет ОП. Он работает в Ruby 1.8 и 1.9. Это немного чище.
Мне нравится, как все просто предполагают, что серверы googles работают. Кредиты для google.
Если вы хотите узнать, есть ли у вас интернет, не полагаясь на Google, вы можете использовать DNS, чтобы узнать, сможете ли вы получить соединение.
Вы можете использовать Ruby DNS Resolv, чтобы попытаться перевести URL-адрес в IP-адрес. Работает для Ruby версии 1.8.6 +
Итак:
#The awesome part: resolv is in the standard library
def has_internet?
require "resolv"
dns_resolver = Resolv::DNS.new()
begin
dns_resolver.getaddress("symbolics.com")#the first domain name ever. Will probably not be removed ever.
return true
rescue Resolv::ResolvError => e
return false
end
end
Надеюсь, это поможет кому-то:)
require 'open-uri'
page = "http://www.google.com/"
file_name = "output.txt"
output = File.open(file_name, "a")
begin
web_page = open(page, :proxy_http_basic_authentication => ["http://your.company.proxy:80/", "your_user_name", "your_user_password"])
output.puts "#{Time.now}: connection established - OK !" if web_page
rescue Exception
output.puts "#{Time.now}: Connection failed !"
output.close
ensure
output.close
end
Те же основы, что и в Ответ Simone Carletti, но совместимый с Ruby 2:
# gem install "net-ping"
require "net/ping"
def internet_connection?
Net::Ping::External.new("8.8.8.8").ping?
end
def connected?
!!Socket.getaddrinfo("google.com", "http")
rescue SocketError => e
e.message != 'getaddrinfo: nodename nor servname provided, or not known'
end
Поскольку он использует имя хоста, первое, что ему нужно сделать, это поиск DNS, который вызывает исключение, если нет подключения к Интернету.