주어진 웹 사이트를 핑하는 스크립트를 만들고 싶습니다. 이 특정 R에 대한 정보를 찾지 못했습니다.R에 웹 사이트 핑 (Ping) R
시작하려면 웹 사이트가 핑에 응답하는지 아닌지에 대한 정보 만 있으면됩니다.
누구든지 기존 스크립트에 대한 정보를 가지고 있거나 가장 먼저 사용하기에 가장 적합한 패키지가 있습니까?
주어진 웹 사이트를 핑하는 스크립트를 만들고 싶습니다. 이 특정 R에 대한 정보를 찾지 못했습니다.R에 웹 사이트 핑 (Ping) R
시작하려면 웹 사이트가 핑에 응답하는지 아닌지에 대한 정보 만 있으면됩니다.
누구든지 기존 스크립트에 대한 정보를 가지고 있거나 가장 먼저 사용하기에 가장 적합한 패키지가 있습니까?
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
을 사용하면 출력을 벡터에 저장할 수 있습니다. 나는 약간의 적당한 출력을 얻기 위해 이것을 재정비하는 연습으로 독자에게 맡긴다.
웹 사이트가 HTTP 요청에 응답하는지 확인하려면 curl HTTP client library에 대한 R 인터페이스 인 RCurl library으로 R에서 URL을 테스트 할 수 있습니다.
예 :
> library(RCurl);
> getURL("http://www.google.com")
[1] "<!doctype html><ht....
당신이 (의 getURL에 "헤더"옵션으로 전달하는 사용자 정의 함수를 작성해야합니다 (200, 404 등) 응답 코드를 검사 할 경우) .
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
용어에 대한 주석 : ping은 웹 사이트가 아닌 호스트를 대상으로합니다. 중요한 점은 서버, 호스트, IP, 도메인 및 웹 사이트의 차이를 이해하는 것입니다. 그것은 대부분의 목적에 큰 문제가 아니지만. – Iterator
일부 사람들은 "ping a website"가 "GET 쿼리를 보내고 응답 코드 200이 반환되는지 확인"을 의미한다고 해석합니다. 나는 그것이 일반적인 용어는 아니지만 거기에 동의합니다. – patrickmdnet