getBinaryURL {RCurl} | R Documentation |
Download binary content
Description
This function allows one to download binary content.
This is a convenience function that is a call to
getURL
with suitable values
for the write
and file
options
for the Curl handle. These take care of processing
the body of the response to the Curl request into a
vector of "raw" elements.
Binary content from POST forms or other requests that are not simple
URL requests can be implemented using the same approach as this
function, i.e., specifying the same values as in the body of this function for
write
and file
in the call to curlPerform
.
Usage
getBinaryURL(url, ..., .opts = list(), curl = getCurlHandle(),
.buf = binaryBuffer(.len), .len = 5000)
Arguments
url |
the URL identifying the content to download.
This can be a regular URL or a
|
... |
additional arguments that are passed to |
.opts |
a list of named values that are passed to
|
curl |
an optional curl handle used in |
.buf |
a raw vector in which to insert the body of the response. This is a parameter to allow the caller to reuse an existing buffer. |
.len |
an non-negative integer which is used as the length for the buffer in which to store the binary data in the response. The buffer is extended if it is not big enough but this allows the caller to provide context specific knowledge about the length of the response, e.g. the size of the file being downloaded, and avoid expanding the buffer as the material is being processed. |
Value
A "raw" vector.
Author(s)
Duncan Temple Lang
See Also
Examples
u = "https://www.omegahat.net/RCurl/data.gz"
if(url.exists(u)) withAutoprint({
content = getBinaryURL(u)
if (getRversion() >= "4") withAutoprint({
x <- memDecompress(content, asChar = TRUE)
read.csv(textConnection(x))
}) else withAutoprint({
tmp = tempfile()
writeBin(content, con = tmp)
read.csv(gzfile(tmp))
unlink(tmp)
})
# Working from the Content-Type in the header of the HTTP response.
h = basicTextGatherer()
content = getBinaryURL(u, .opts = list(headerfunction = h$update))
header = parseHTTPHeader(h$value())
type = strsplit(header["Content-Type"], "/")[[1]]
if(type[2] %in% c("x-gzip", "gzip")) {
if (getRversion() >= "4") {
cat(memDecompress(content, asChar = TRUE))
} else {
tmp = tempfile()
writeBin(content, con = tmp)
writeLines(readLines(gzfile(tmp)))
unlink(tmp)
}
}
})