2011-08-10 6 views
9

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

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

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

+2

Комментарий к терминологии: pinging направляется на хост, а не на веб-сайт. Если это имеет значение, вы можете понять разницу между сервером, хостом, IP, доменом и веб-сайтом. Однако для большинства целей это не имеет большого значения. – Iterator

+0

Обратите внимание, что некоторые люди толкуют «ping a website», чтобы означать «отправить запрос GET и убедиться, что ответный код 200 возвращается». Я согласен, что это не общая терминология, но она есть. – patrickmdnet

ответ

14

Мы можем использовать вызов 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 

Если вы хотите, чтобы захватить выход пинга, вы можете либо установить 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 позволяет сохранять выходные данные в векторе. Я оставляю это читателю как упражнение, чтобы переставить это, чтобы получить достойный выход.

1

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

Пример:

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

Если вы хотите проверить код ответа (на 200, 404 и т.д.), вам нужно будет написать пользовательскую функцию для передачи в качестве опции «заголовка» в GetURL() ,

4

RCurl::url.exists работает на localhost (где ping не всегда) и быстрее, чем RCurl::getURL.

> library(RCurl) 
> url.exists("google.com") 
[1] TRUE 
> url.exists("localhost:8888") 
[1] TRUE 
> url.exists("localhost:8012") 
[1] FALSE 
Смежные вопросы