| mw_cgi {webfakes} | R Documentation |
Middleware that calls a CGI script
Description
You can use it as an unconditional middleware in app$use(),
as a handler on app$get(), app$post(), etc., or you can call it
from a handler. See examples below.
Usage
mw_cgi(command, args = character(), timeout = as.difftime(Inf, units = "secs"))
Arguments
command |
External command to run. |
args |
Arguments to pass to the external command. |
timeout |
Timeout for the external command. If the command does not terminate in time, the web server kills it and returns an 500 response. |
Value
A function with signature
function(req, res, env = character())
See RFC 3875 for details on the CGI protocol.
The request body (if any) is passed to the external command as standard
intput. mw_cgi() sets CONTENT_LENGTH, CONTENT_TYPE,
GATEWAY_INTERFACE, PATH_INFO, QUERY_STRING, REMOTE_ADDR,
REMOTE_HOST, REMOTE_USER, REQUEST_METHOD, SERVER_NAME,
SERVER_PORT, SERVER_PROTOCOL, SERVER_SOFTEWARE.
It does not currently set the AUTH_TYPE, PATH_TRANSLATED,
REMOTE_IDENT, SCRIPT_NAME environment variables.
The standard output of the external command is used to set the response status code, the response headers and the response body. Example output from git's CGI:
Status: 200 OK Expires: Fri, 01 Jan 1980 00:00:00 GMT Pragma: no-cache Cache-Control: no-cache, max-age=0, must-revalidate Content-Type: application/x-git-upload-pack-advertisement 000eversion 2 0015agent=git/2.42.0 0013ls-refs=unborn 0020fetch=shallow wait-for-done 0012server-option 0017object-format=sha1 0010object-info 0000
See Also
Other middleware:
mw_cookie_parser(),
mw_etag(),
mw_json(),
mw_log(),
mw_multipart(),
mw_range_parser(),
mw_raw(),
mw_static(),
mw_text(),
mw_urlencoded()
Examples
app <- new_app()
app$use(mw_cgi("echo", "Status: 200\n\nHello"))
app
app2 <- new_app()
app2$get("/greet", mw_cgi("echo", "Status: 200\n\nHello"))
app2
# Using `mw_cgi()` in a handler, you can pass extra environment variables
app3 <- new_app()
cgi <- mw_cgi("echo", "Status: 200\n\nHello")
app2$get("/greet", function(req, res) {
cgi(req, res, env = c("EXTRA_VAR" = "EXTRA_VALUE"))
})
app3