Ping a website in R

前端 未结 4 1364
难免孤独
难免孤独 2020-12-03 17:39

I would like to create a script in R that pings a given website. I haven\'t found any information about this specific for R.

To start with, all I need is the informa

相关标签:
4条回答
  • 2020-12-03 17:58

    If you want to see if a website is responding to HTTP requests, you can test an URL in R with the RCurl library, which is an R interface to the curl HTTP client library.

    Example:

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

    If you want to examine the response code (for 200, 404, etc.) you will need to write a custom function to pass as the "header" option to getURL().

    0 讨论(0)
  • 2020-12-03 17:59

    We can use a system2 call to get the return status of the ping command in the shell. On Windows (and probably linux) following will work :

    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
    

    If you want to capture the output of ping, you can either set stdout = "", or use a system call:

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

    using the option intern = TRUE makes it possible to save the output in a vector. I leave it to the reader as an exercise to rearrange this in order to get some decent output.

    0 讨论(0)
  • 2020-12-03 18:10

    To get the status code

    library(httr)
    
    b <- GET("http://www.google.com")
    
    b$status_code
    
    [1] 200 
    
    0 讨论(0)
  • 2020-12-03 18:11

    RCurl::url.exists works for localhost (where ping doesn't always) and is faster than RCurl::getURL.

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

    Note that it is possible to set the timeout (which by default is rather long)

    > url.exists("google.com", timeout = 5) # timeout in seconds
    [1] TRUE
    
    0 讨论(0)
提交回复
热议问题