2011-08-10 19 views
9

Me gustaría crear un script en R que haga ping en un sitio web determinado. No he encontrado ninguna información sobre esto específico para R.Ping un sitio web en R

Para empezar, todo lo que necesito es la información sobre si las respuestas del sitio web al ping o no.

¿Alguien tiene información sobre los scripts existentes o qué paquete es el mejor para usar para empezar?

+2

Un comentario sobre la terminología: pinging se dirige a un host, no a un sitio web. Si es importante, es posible que desee comprender la diferencia entre un servidor, host, IP, dominio y sitio web. Sin embargo, no es un gran problema para la mayoría de los propósitos. – Iterator

+0

Tenga en cuenta que algunas personas interpretan que "hacer ping en un sitio web" significa "enviar una consulta GET y asegurarse de que se devuelva un código de respuesta 200". Estoy de acuerdo en que no es la terminología común, pero está por ahí. – patrickmdnet

Respuesta

14

Podemos utilizar una llamada system2 para obtener el estado de devolución del comando ping en el shell. En Windows (y, probablemente, Linux) siguiente funcionará:

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 

Si desea capturar la salida de la mesa de ping, puede establecer stdout = "", o utilizar una llamada al sistema:

> 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"   

utilizando la opción intern = TRUE hace posible guardar la salida en un vector. Dejo al lector como un ejercicio para reorganizar esto con el fin de obtener un rendimiento decente.

1

Si desea ver si un sitio web responde a las solicitudes HTTP, puede probar una URL en R con el RCurl library, que es una interfaz R para el curl HTTP client library.

Ejemplo:

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

Si desea examinar el código de respuesta (para 200, 404, etc.) tendrá que escribir una función personalizada para pasar como la opción de "cabecera" a getURL() .

4

RCurl::url.exists funciona para localhost (donde ping no siempre) y es más rápido que RCurl::getURL.

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