% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/callback.R
\name{get_callback}
\alias{get_callback}
\alias{set_callback}
\title{Install or uninstall a callback function}
\usage{
get_callback(name)

set_callback(name, new_callback = NULL)
}
\arguments{
\item{name}{Character scalar, name of the callback to query or set.}

\item{new_callback}{The callback function to install, a function object;
or \code{NULL} to remove the currently installed callback (if any).}
}
\value{
\code{get_callback} returns the currently installed
callback, or \code{NULL} if none is installed.

\code{set_callback} returns the previously installed callback,
or \code{NULL} if none was installed.
}
\description{
Supported callback functions: \describe{
\item{\sQuote{request}}{This callback is called before an HTTP request
is performed, with the \code{request} object as an argument.
If the callback returns a value other than \code{NULL}, the HTTP
request is not performed at all, and the return value of the callback
is returned. This mechanism can be used to replay previously
recorded HTTP responses.
}
\item{\sQuote{response}}{This callback is called after an HTTP request
is performed. The callback is called with two arguments: the
\code{request} object and the \code{response} object of the HTTP
request. If this callback returns a value other than \code{NULL},
then this value is returned by \code{httr}.}
}
}
\details{
Note that it is not possible to install multiple callbacks of the same
type. The installed callback overwrites the previously intalled one.
To uninstall a callback function, set it to \code{NULL} with
\code{set_callback()}.

See the \code{httrmock} package for a proper example that uses
callbacks.
}
\examples{
\dontrun{
## Log all HTTP requests to the screeen
req_logger <- function(req) {
  cat("HTTP request to", sQuote(req$url), "\n")
}

old <- set_callback("request", req_logger)
g1 <- GET("https://httpbin.org")
g2 <- GET("https://httpbin.org/ip")
set_callback("request", old)

## Log all HTTP requests and response status codes as well
req_logger2 <- function(req) {
  cat("HTTP request to", sQuote(req$url), "... ")
}
res_logger <- function(req, res) {
  cat(res$status_code, "\n")
}

old_req <- set_callback("request", req_logger2)
old_res <- set_callback("response", res_logger)
g3 <- GET("https://httpbin.org")
g4 <- GET("https://httpbin.org/ip")
set_callback("request", old_req)
set_callback("response", old_res)

## Return a recorded response, without performing the HTTP request
replay <- function(req) {
  if (req$url == "https://httpbin.org") g3
}
old_req <- set_callback("request", replay)
grec <- GET("https://httpbin.org")
grec$date == g3$date
set_callback("request", old_req)
}

}
