2011-08-10 3 views
9

주어진 웹 사이트를 핑하는 스크립트를 만들고 싶습니다. 이 특정 R에 대한 정보를 찾지 못했습니다.R에 웹 사이트 핑 (Ping) R

시작하려면 웹 사이트가 핑에 응답하는지 아닌지에 대한 정보 만 있으면됩니다.

누구든지 기존 스크립트에 대한 정보를 가지고 있거나 가장 먼저 사용하기에 가장 적합한 패키지가 있습니까?

+2

용어에 대한 주석 : ping은 웹 사이트가 아닌 호스트를 대상으로합니다. 중요한 점은 서버, 호스트, IP, 도메인 및 웹 사이트의 차이를 이해하는 것입니다. 그것은 대부분의 목적에 큰 문제가 아니지만. – Iterator

+0

일부 사람들은 "ping a website"가 "GET 쿼리를 보내고 응답 코드 200이 반환되는지 확인"을 의미한다고 해석합니다. 나는 그것이 일반적인 용어는 아니지만 거기에 동의합니다. – patrickmdnet

답변

14

system2 호출을 사용하여 쉘에서 ping 명령의 반환 상태를 얻을 수 있습니다. Windows에서 (아마도 리눅스) 다음은 작동합니다

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을 사용하면 출력을 벡터에 저장할 수 있습니다. 나는 약간의 적당한 출력을 얻기 위해 이것을 재정비하는 연습으로 독자에게 맡긴다.

1

웹 사이트가 HTTP 요청에 응답하는지 확인하려면 curl HTTP client library에 대한 R 인터페이스 인 RCurl library으로 R에서 URL을 테스트 할 수 있습니다.

예 :

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

당신이 (의 getURL에 "헤더"옵션으로 전달하는 사용자 정의 함수를 작성해야합니다 (200, 404 등) 응답 코드를 검사 할 경우) .

4

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 
관련 문제