Пинг сайта в R - PullRequest
       32

Пинг сайта в R

13 голосов
/ 10 августа 2011

Я хотел бы создать скрипт на R, который пингует данный веб-сайт.Я не нашел никакой информации об этом конкретном для R.

Для начала все, что мне нужно, это информация о том, отвечает ли сайт на пинг или нет.

Есть ли у кого-нибудь информацияо существующих скриптах или какой пакет лучше всего использовать для начала?

Ответы [ 4 ]

18 голосов
/ 10 августа 2011

Мы можем использовать вызов system2, чтобы получить статус возврата команды ping в оболочке.В Windows (и, вероятно, в Linux) будет работать следующее:

ping <- function(x, stderr = FALSE, stdout = FALSE, ...){
    pingvec <- system2("ping", x,
                       stderr = FALSE,
                       stdout = FALSE,...)
    if (pingvec == 0) TRUE else FALSE
}

# example
> ping("google.com")
[1] FALSE
> ping("ugent.be")
[1] TRUE

Если вы хотите захватить вывод команды ping, вы можете либо установить stdout = "", либо использовать системный вызов:

> X <- system("ping ugent.be", intern = TRUE)
> X
 [1] ""                                                         "Pinging ugent.be [157.193.43.50] with 32 bytes of data:" 
 [3] "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"       "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"      
 [5] "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"       "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"      
 [7] ""                                                         "Ping statistics for 157.193.43.50:"                      
 [9] "    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)," "Approximate round trip times in milli-seconds:"          
[11] "    Minimum = 0ms, Maximum = 0ms, Average = 0ms"         

с помощью опции intern = TRUE позволяет сохранить выходные данные в векторе.Я оставляю это читателю в качестве упражнения, чтобы перестроить это, чтобы получить приличный вывод.

7 голосов
/ 02 августа 2013

RCurl::url.exists работает для локального хоста (где пинг не всегда) и быстрее, чем RCurl::getURL.

> library(RCurl)
> url.exists("google.com")
[1] TRUE
> url.exists("localhost:8888")
[1] TRUE
> url.exists("localhost:8012")
[1] FALSE

Обратите внимание, что можно установить тайм-аут (который по умолчанию довольно длинный)

> url.exists("google.com", timeout = 5) # timeout in seconds
[1] TRUE
2 голосов
/ 11 августа 2011

Если вы хотите узнать, отвечает ли веб-сайт на запросы HTTP, вы можете протестировать URL-адрес в R с помощью библиотеки RCurl , которая является интерфейсом R для клиентской библиотеки curl HTTP .

Пример:

> library(RCurl);
> getURL("http://www.google.com")
[1] "<!doctype html><ht....

Если вы хотите проверить код ответа (для 200, 404 и т. Д.), Вам нужно написать пользовательскую функцию, которая будет передаваться в качестве опции "header" для getURL ().

0 голосов
/ 24 октября 2018

Для получения кода состояния

library(httr)

b <- GET("http://www.google.com")

b$status_code

[1] 200 
...