http_get: Asynchronous HTTP GET request

View source: R/http.R

http_getR Documentation

Asynchronous HTTP GET request

Description

Start an HTTP GET request in the background, and report its completion via a deferred.

Usage

http_get(
  url,
  headers = character(),
  file = NULL,
  options = list(),
  on_progress = NULL
)

Arguments

url

URL to connect to.

headers

HTTP headers to send.

file

If not NULL, it must be a string, specifying a file. The body of the response is written to this file.

options

Options to set on the handle. Passed to curl::handle_setopt().

on_progress

Progress handler function. It is only used if the response body is written to a file. See details below.

Value

Deferred object.

HTTP event emitters

An async HTTP deferred object is also an event emitter, see event_emitter. Use ⁠$event_emitter⁠ to access the event emitter API, and call ⁠$event_emitter$listen_on()⁠ etc. to listen on HTTP events, etc.

  • "data" is emitted when we receive data from the server, the data is passed on to the listeners as a raw vector. Note that zero-length raw vectors might also happen.

  • "end" is emitted at the end of the HTTP data stream, without additional arguments (Also on error.)

Here is an example, that uses the web server from the webfakes package:

http <- webfakes::new_app_process(webfakes::httpbin_app())
stream_http <- function() {
  query <- http_get(http$url("/drip?duration=3&numbytes=10"))
  query$event_emitter$
    listen_on("data", function(bytes) {
      writeLines(paste("Got", length(bytes), "byte(s):"))
      print(bytes)
    })$
    listen_on("end", function() {
      writeLines("Done.")
    })
  query
}

response <- synchronise(stream_http())

Progress bars

http_get can report on the progress of the download, via the on_progress argument. This is called with a list, with entries:

  • url: the specified url to download

  • handle: the curl handle of the request. This can be queried using curl::handle_data() to get the response status_code, the final URL (after redirections), timings, etc.

  • file: the file argument.

  • total: total bytes of the response. If this is unknown, it is set to zero.

  • current: already received bytes of the response.

See Also

Other asyncronous HTTP calls: http_head(), http_setopt()

Examples


afun <- async(function() {
  http_get("https://eu.httpbin.org/status/200")$
    then(function(x) x$status_code)
})
synchronise(afun())


r-lib/async documentation built on Nov. 19, 2024, 12:08 p.m.