R version 2.6.0 Under development (unstable) (2007-05-22 r41673)
Copyright (C) 2007 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> ## These are tests that require socket and internet functionality, and
> ## a working Internet connection.
> ## We attempt to test for those.
>
> if(!capabilities()["http/ftp"]) {
+ warning("no internet capabilities")
+ q()
+ }
>
> if(.Platform$OS.type == "unix" &&
+ is.null(nsl("cran.r-project.org"))) q()
>
> # test do_download.
> nrow(available.packages(contrib.url("http://cran.r-project.org")))
[1] 1300
>
> # test url connections on http
> zz <- url("http://cran.r-project.org/")
> readLines(zz)
[1] ""
[2] ""
[3] ""
[4] "
"
[5] "The Comprehensive R Archive Network "
[6] " "
[7] " "
[8] " "
[9] ""
[10] ""
[11] ""
[12] ""
[13] " "
[14] " "
[15] " "
[16] " "
[17] ""
[18] "The Comprehensive R Archive Network "
[19] ""
[20] "Your browser seems not to support frames,"
[21] "here is the contents page of CRAN."
[22] " "
[23] " "
[24] ""
[25] ""
[26] ""
> close(zz)
>
> ## check graceful failure:
> try(zz <- url("http://foo.bar", "r"))
Error in url("http://foo.bar", "r") : unable to open connection
In addition: Warning message:
In url("http://foo.bar", "r") : unable to resolve 'foo.bar'
>
> # and via read.table, test http and ftp.
>
> read.table("http://www.stats.ox.ac.uk/pub/datasets/csb/ch11b.dat")
V1 V2 V3 V4 V5
1 1 307 930 36.58 0
2 2 307 940 36.73 0
3 3 307 950 36.93 0
4 4 307 1000 37.15 0
5 5 307 1010 37.23 0
6 6 307 1020 37.24 0
7 7 307 1030 37.24 0
8 8 307 1040 36.90 0
9 9 307 1050 36.95 0
10 10 307 1100 36.89 0
11 11 307 1110 36.95 0
12 12 307 1120 37.00 0
13 13 307 1130 36.90 0
14 14 307 1140 36.99 0
15 15 307 1150 36.99 0
16 16 307 1200 37.01 0
17 17 307 1210 37.04 0
18 18 307 1220 37.04 0
19 19 307 1230 37.14 0
20 20 307 1240 37.07 0
21 21 307 1250 36.98 0
22 22 307 1300 37.01 0
23 23 307 1310 36.97 0
24 24 307 1320 36.97 0
25 25 307 1330 37.12 0
26 26 307 1340 37.13 0
27 27 307 1350 37.14 0
28 28 307 1400 37.15 0
29 29 307 1410 37.17 0
30 30 307 1420 37.12 0
31 31 307 1430 37.12 0
32 32 307 1440 37.17 0
33 33 307 1450 37.28 0
34 34 307 1500 37.28 0
35 35 307 1510 37.44 0
36 36 307 1520 37.51 0
37 37 307 1530 37.64 0
38 38 307 1540 37.51 0
39 39 307 1550 37.98 1
40 40 307 1600 38.02 1
41 41 307 1610 38.00 1
42 42 307 1620 38.24 1
43 43 307 1630 38.10 1
44 44 307 1640 38.24 1
45 45 307 1650 38.11 1
46 46 307 1700 38.02 1
47 47 307 1710 38.11 1
48 48 307 1720 38.01 1
49 49 307 1730 37.91 1
50 50 307 1740 37.96 1
51 51 307 1750 38.03 1
52 52 307 1800 38.17 1
53 53 307 1810 38.19 1
54 54 307 1820 38.18 1
55 55 307 1830 38.15 1
56 56 307 1840 38.04 1
57 57 307 1850 37.96 1
58 58 307 1900 37.84 1
59 59 307 1910 37.83 1
60 60 307 1920 37.84 1
61 61 307 1930 37.74 1
62 62 307 1940 37.76 1
63 63 307 1950 37.76 1
64 64 307 2000 37.64 1
65 65 307 2010 37.63 1
66 66 307 2020 38.06 1
67 67 307 2030 38.19 1
68 68 307 2040 38.35 1
69 69 307 2050 38.25 1
70 70 307 2100 37.86 1
71 71 307 2110 37.95 1
72 72 307 2120 37.95 1
73 73 307 2130 37.76 1
74 74 307 2140 37.60 1
75 75 307 2150 37.89 1
76 76 307 2200 37.86 1
77 77 307 2210 37.71 1
78 78 307 2220 37.78 1
79 79 307 2230 37.82 1
80 80 307 2240 37.76 1
81 81 307 2250 37.81 1
82 82 307 2300 37.84 1
83 83 307 2310 38.01 1
84 84 307 2320 38.10 1
85 85 307 2330 38.15 1
86 86 307 2340 37.92 1
87 87 307 2350 37.64 1
88 88 308 0 37.70 1
89 89 308 10 37.46 1
90 90 308 20 37.41 1
91 91 308 30 37.46 1
92 92 308 40 37.56 1
93 93 308 50 37.55 1
94 94 308 100 37.75 1
95 95 308 110 37.76 1
96 96 308 120 37.73 1
97 97 308 130 37.77 1
98 98 308 140 38.01 1
99 99 308 150 38.04 1
100 100 308 200 38.07 1
> read.table("ftp://ftp.stats.ox.ac.uk/pub/datasets/csb/ch11b.dat")
V1 V2 V3 V4 V5
1 1 307 930 36.58 0
2 2 307 940 36.73 0
3 3 307 950 36.93 0
4 4 307 1000 37.15 0
5 5 307 1010 37.23 0
6 6 307 1020 37.24 0
7 7 307 1030 37.24 0
8 8 307 1040 36.90 0
9 9 307 1050 36.95 0
10 10 307 1100 36.89 0
11 11 307 1110 36.95 0
12 12 307 1120 37.00 0
13 13 307 1130 36.90 0
14 14 307 1140 36.99 0
15 15 307 1150 36.99 0
16 16 307 1200 37.01 0
17 17 307 1210 37.04 0
18 18 307 1220 37.04 0
19 19 307 1230 37.14 0
20 20 307 1240 37.07 0
21 21 307 1250 36.98 0
22 22 307 1300 37.01 0
23 23 307 1310 36.97 0
24 24 307 1320 36.97 0
25 25 307 1330 37.12 0
26 26 307 1340 37.13 0
27 27 307 1350 37.14 0
28 28 307 1400 37.15 0
29 29 307 1410 37.17 0
30 30 307 1420 37.12 0
31 31 307 1430 37.12 0
32 32 307 1440 37.17 0
33 33 307 1450 37.28 0
34 34 307 1500 37.28 0
35 35 307 1510 37.44 0
36 36 307 1520 37.51 0
37 37 307 1530 37.64 0
38 38 307 1540 37.51 0
39 39 307 1550 37.98 1
40 40 307 1600 38.02 1
41 41 307 1610 38.00 1
42 42 307 1620 38.24 1
43 43 307 1630 38.10 1
44 44 307 1640 38.24 1
45 45 307 1650 38.11 1
46 46 307 1700 38.02 1
47 47 307 1710 38.11 1
48 48 307 1720 38.01 1
49 49 307 1730 37.91 1
50 50 307 1740 37.96 1
51 51 307 1750 38.03 1
52 52 307 1800 38.17 1
53 53 307 1810 38.19 1
54 54 307 1820 38.18 1
55 55 307 1830 38.15 1
56 56 307 1840 38.04 1
57 57 307 1850 37.96 1
58 58 307 1900 37.84 1
59 59 307 1910 37.83 1
60 60 307 1920 37.84 1
61 61 307 1930 37.74 1
62 62 307 1940 37.76 1
63 63 307 1950 37.76 1
64 64 307 2000 37.64 1
65 65 307 2010 37.63 1
66 66 307 2020 38.06 1
67 67 307 2030 38.19 1
68 68 307 2040 38.35 1
69 69 307 2050 38.25 1
70 70 307 2100 37.86 1
71 71 307 2110 37.95 1
72 72 307 2120 37.95 1
73 73 307 2130 37.76 1
74 74 307 2140 37.60 1
75 75 307 2150 37.89 1
76 76 307 2200 37.86 1
77 77 307 2210 37.71 1
78 78 307 2220 37.78 1
79 79 307 2230 37.82 1
80 80 307 2240 37.76 1
81 81 307 2250 37.81 1
82 82 307 2300 37.84 1
83 83 307 2310 38.01 1
84 84 307 2320 38.10 1
85 85 307 2330 38.15 1
86 86 307 2340 37.92 1
87 87 307 2350 37.64 1
88 88 308 0 37.70 1
89 89 308 10 37.46 1
90 90 308 20 37.41 1
91 91 308 30 37.46 1
92 92 308 40 37.56 1
93 93 308 50 37.55 1
94 94 308 100 37.75 1
95 95 308 110 37.76 1
96 96 308 120 37.73 1
97 97 308 130 37.77 1
98 98 308 140 38.01 1
99 99 308 150 38.04 1
100 100 308 200 38.07 1
>
> ## everything from here on is directly over sockets
> if(!capabilities("sockets")) stop("no socket capabilities")
>
> # do the same thing via sockets (cut-down httpclient)
> httpget <- function (url, port = 80)
+ {
+ urlel <- strsplit(url, "/")[[1]]
+ if (urlel[1] != "http:") stop("Not an http:// URL")
+ host <- urlel[3]
+ rurl <- paste(c("", urlel[-(1:3)]), collapse = "/")
+ a <- make.socket(host, port = port)
+ on.exit(close.socket(a))
+ headreq <- paste("HEAD", rurl, "HTTP/1.0\r\nConnection: Keep-Alive\r\nAccept: text/plain\r\n\r\n")
+ write.socket(a, headreq)
+ head <- read.socket(a, maxlen = 8000)
+ b <- strsplit(head, "\n")[[1]]
+ if (length(grep("200 OK", b[1])) == 0) stop(b[1])
+ len <- as.numeric(strsplit(grep("Content-Length", b, value = TRUE),
+ ":")[[1]][2])
+ getreq <- paste("GET", rurl, "HTTP/1.0\r\nConnection: Keep-Alive\r\nAccept: text/plain\r\n\r\n")
+ write.socket(a, getreq)
+ junk <- read.socket(a, maxlen = nchar(head))
+ data <- ""
+ b <- strsplit(c(head, junk), "\n")
+ nn <- length(b[[1]])
+ if (length(b[[2]]) > nn)
+ data <- paste(b[[2]][-(1:nn)], collapse = "\n")
+ while (nchar(data) < len) {
+ data <- paste(data, read.socket(a, maxlen = len - nchar(data)),
+ sep = "")
+ }
+ strsplit(data, "\n")[[1]]
+ }
>
> if(nchar(Sys.getenv("http_proxy")) > 0
+ || nchar(Sys.getenv("HTTP_PROXY")) > 0) {
+ cat("http proxy is set, so skip test of http over sockets\n")
+ } else {
+ httpget("http://www.stats.ox.ac.uk/pub/datasets/csb/ch11b.dat")
+ }
[1] "001 307 0930 36.58 0" "002 307 0940 36.73 0" "003 307 0950 36.93 0"
[4] "004 307 1000 37.15 0" "005 307 1010 37.23 0" "006 307 1020 37.24 0"
[7] "007 307 1030 37.24 0" "008 307 1040 36.90 0" "009 307 1050 36.95 0"
[10] "010 307 1100 36.89 0" "011 307 1110 36.95 0" "012 307 1120 37.00 0"
[13] "013 307 1130 36.90 0" "014 307 1140 36.99 0" "015 307 1150 36.99 0"
[16] "016 307 1200 37.01 0" "017 307 1210 37.04 0" "018 307 1220 37.04 0"
[19] "019 307 1230 37.14 0" "020 307 1240 37.07 0" "021 307 1250 36.98 0"
[22] "022 307 1300 37.01 0" "023 307 1310 36.97 0" "024 307 1320 36.97 0"
[25] "025 307 1330 37.12 0" "026 307 1340 37.13 0" "027 307 1350 37.14 0"
[28] "028 307 1400 37.15 0" "029 307 1410 37.17 0" "030 307 1420 37.12 0"
[31] "031 307 1430 37.12 0" "032 307 1440 37.17 0" "033 307 1450 37.28 0"
[34] "034 307 1500 37.28 0" "035 307 1510 37.44 0" "036 307 1520 37.51 0"
[37] "037 307 1530 37.64 0" "038 307 1540 37.51 0" "039 307 1550 37.98 1"
[40] "040 307 1600 38.02 1" "041 307 1610 38.00 1 " "042 307 1620 38.24 1 "
[43] "043 307 1630 38.10 1" "044 307 1640 38.24 1" "045 307 1650 38.11 1"
[46] "046 307 1700 38.02 1" "047 307 1710 38.11 1" "048 307 1720 38.01 1"
[49] "049 307 1730 37.91 1" "050 307 1740 37.96 1" "051 307 1750 38.03 1"
[52] "052 307 1800 38.17 1" "053 307 1810 38.19 1" "054 307 1820 38.18 1"
[55] "055 307 1830 38.15 1" "056 307 1840 38.04 1" "057 307 1850 37.96 1"
[58] "058 307 1900 37.84 1" "059 307 1910 37.83 1" "060 307 1920 37.84 1"
[61] "061 307 1930 37.74 1" "062 307 1940 37.76 1" "063 307 1950 37.76 1"
[64] "064 307 2000 37.64 1" "065 307 2010 37.63 1" "066 307 2020 38.06 1"
[67] "067 307 2030 38.19 1" "068 307 2040 38.35 1" "069 307 2050 38.25 1"
[70] "070 307 2100 37.86 1" "071 307 2110 37.95 1" "072 307 2120 37.95 1"
[73] "073 307 2130 37.76 1" "074 307 2140 37.60 1" "075 307 2150 37.89 1"
[76] "076 307 2200 37.86 1" "077 307 2210 37.71 1" "078 307 2220 37.78 1"
[79] "079 307 2230 37.82 1" "080 307 2240 37.76 1" "081 307 2250 37.81 1"
[82] "082 307 2300 37.84 1" "083 307 2310 38.01 1" "084 307 2320 38.10 1"
[85] "085 307 2330 38.15 1" "086 307 2340 37.92 1" "087 307 2350 37.64 1"
[88] "088 308 0000 37.70 1" "089 308 0010 37.46 1" "090 308 0020 37.41 1"
[91] "091 308 0030 37.46 1" "092 308 0040 37.56 1" "093 308 0050 37.55 1"
[94] "094 308 0100 37.75 1" "095 308 0110 37.76 1" "096 308 0120 37.73 1"
[97] "097 308 0130 37.77 1" "098 308 0140 38.01 1" "099 308 0150 38.04 1"
[100] "100 308 0200 38.07 1"
>
> finger <- function(user, host = "localhost", port = 79, print = TRUE)
+ {
+ if (!is.character(user))
+ stop("user name must be a string")
+ user <- paste(user,"\r\n")
+ socket <- make.socket(host, port)
+ on.exit(close.socket(socket))
+ write.socket(socket, user)
+ output <- character(0)
+ repeat{
+ ss <- read.socket(socket)
+ if (ss == "") break
+ output <- paste(output, ss)
+ }
+ close.socket(socket)
+ if (print) cat(output)
+ invisible(output)
+ }
> try(finger("root")) ## only works if your site provides a finger daemon
Error in make.socket(host, port) : socket not established
>