Skip to contents

This class wraps all functionality related to extracting information from a http request. Much of the functionality is inspired by the Request class in Express.js, so the documentation for this will complement this document. As reqres is build on top of the Rook specifications the Request object is initialized from a Rook-compliant object. This will often be the request object provided by the httpuv framework. While it shouldn't be needed, the original Rook object is always accessible and can be modified, though any modifications will not propagate to derived values in the Request object (e.g. changing the HTTP_HOST element of the Rook object will not change the host field of the Request object). Because of this, direct manipulation of the Rook object is generally discouraged.

Usage

as.Request(x, ...)

is.Request(x)

Arguments

x

An object coercible to a Request.

...

Parameters passed on to Request$new()

Value

A Request object (for as.Request()) or a logical indicating whether the object is a Request (for is.Request())

Initialization

A new 'Request'-object is initialized using the new() method on the generator:

Usage

req <- Request$new(rook, trust = FALSE)

See also

Response for handling http responses

Active bindings

trust

A logical indicating whether the request is trusted. Mutable

method

A string indicating the request method (in lower case, e.g. 'get', 'put', etc.). Immutable

body

An object holding the body of the request. This is an empty string by default and needs to be populated using the set_body() method (this is often done using a body parser that accesses the Rook$input stream). Immutable

cookies

Access a named list of all cookies in the request. These have been URI decoded. Immutable

headers

Access a named list of all headers in the request. In order to follow R variable naming standards - have been substituted with _. Use the get_header() method to lookup based on the correct header name. Immutable

host

Return the domain of the server given by the "Host" header if trust == FALSE. If trust == true returns the X-Forwarded-Host instead. Immutable

ip

Returns the remote address of the request if trust == FALSE. If trust == TRUE it will instead return the first value of the X-Forwarded-For header. Immutable

ips

If trust == TRUE it will return the full list of ips in the X-Forwarded-For header. If trust == FALSE it will return an empty vector. Immutable

protocol

Returns the protocol (e.g. 'http') used for the request. If trust == TRUE it will use the value of the X-Forwarded-Proto header. Immutable

root

The mount point of the application receiving this request. Can be empty if the application is mounted on the server root. Immutable

path

The part of the url following the root. Defines the local target of the request (independent of where it is mounted). Immutable

url

The full URL of the request. Immutable

query

The query string of the request (anything following "?" in the URL) parsed into a named list. The query has been url decoded and "+" has been substituted with space. Multiple queries are expected to be separated by either "&" or "|". Immutable

query_delim

The delimiter used for specifying multiple values in a query. If NULL then queries are expected to contain multiple key-value pairs for the same key in order to provide an array, e.g. ?arg1=3&arg1=7. If setting it to ","", "|", or " " then an array can be provided in a single key-value pair, e.g. ?arg1=3|7

querystring

The unparsed query string of the request, including "?". If no query string exists it will be "" rather than "?"

xhr

A logical indicating whether the X-Requested-With header equals XMLHttpRequest thus indicating that the request was performed using JavaScript library such as jQuery. Immutable

secure

A logical indicating whether the request was performed using a secure connection, i.e. protocol == 'https'. Immutable

origin

The original object used to create the Request object. As reqres currently only works with rook this will always return the original rook object. Immutable, though the content of the rook object itself might be manipulated as it is an environment.

response

If a Response object has been created for this request it is accessible through this field. Immutable

Methods


Method new()

Create a new request from a rook object

Usage

Request$new(rook, trust = FALSE)

Arguments

rook

The rook object to base the request on

trust

Is this request trusted blindly. If TRUE X-Forwarded-* headers will be returned when querying host, ip, and protocol


Method print()

Pretty printing of the object

Usage

Request$print(...)

Arguments

...

ignored


Method set_body()

Sets the content of the request body. This method should mainly be used in concert with a body parser that reads the rook$input stream

Usage

Request$set_body(content)

Arguments

content

An R object representing the body of the request


Method set_cookies()

Sets the cookies of the request. The cookies are automatically parsed and populated, so this method is mainly available to facilitate cookie signing and encryption

Usage

Request$set_cookies(cookies)

Arguments

cookies

A named list of cookie values


Method accepts()

Given a vector of response content types it returns the preferred one based on the Accept header.

Usage

Request$accepts(types)

Arguments

types

A vector of types


Method accepts_charsets()

Given a vector of possible character encodings it returns the preferred one based on the Accept-Charset header.

Usage

Request$accepts_charsets(charsets)

Arguments

charsets

A vector of charsets


Method accepts_encoding()

Given a vector of possible content encodings (usually compression algorithms) it selects the preferred one based on the Accept-Encoding header. If there is no match it will return "identity" signaling no compression.

Usage

Request$accepts_encoding(encoding)

Arguments

encoding

A vector of encoding names


Method accepts_language()

Given a vector of possible content languages it selects the best one based on the Accept-Language header.

Usage

Request$accepts_language(language)

Arguments

language

A vector of languages


Method is()

Queries whether the body of the request is in a given format by looking at the Content-Type header. Used for selecting the best parsing method.

Usage

Request$is(type)

Arguments

type

A vector of content types to check for. Can be fully qualified MIME types, a file extension, or a mime type with wildcards


Method get_header()

Get the header of the specified name.

Usage

Request$get_header(name)

Arguments

name

The name of the header to get


Method respond()

Creates a new Response object from the request

Usage

Request$respond()


Method parse()

Based on provided parsers it selects the appropriate one by looking at the Content-Type header and assigns the result to the request body. A parser is a function accepting a raw vector, and a named list of additional directives, and returns an R object of any kind (if the parser knows the input to be plain text, simply wrap it in rawToChar()). If the body is compressed, it will be decompressed based on the Content-Encoding header prior to passing it on to the parser. See parsers for a list of pre-supplied parsers. Parsers are either supplied in a named list or as named arguments to the parse method. The names should correspond to mime types or known file extensions. If autofail = TRUE the response will be set with the correct error code if parsing fails. parse() returns TRUE if parsing was successful and FALSE if not

Usage

Request$parse(..., autofail = TRUE)

Arguments

...

A named set of parser functions

autofail

Automatically populate the response if parsing fails


Method parse_raw()

This is a simpler version of the parse() method. It will attempt to decompress the body and set the body field to the resulting raw vector. It is then up to the server to decide how to handle the payload. It returns TRUE if successful and FALSE otherwise.

Usage

Request$parse_raw(autofail = TRUE)

Arguments

autofail

Automatically populate the response if parsing fails


Method as_message()

Prints a HTTP representation of the request to the output stream.

Usage

Request$as_message()


Method clone()

The objects of this class are cloneable with this method.

Usage

Request$clone(deep = FALSE)

Arguments

deep

Whether to make a deep clone.

Examples

fake_rook <- fiery::fake_request(
  'http://example.com/test?id=34632&question=who+is+hadley',
  content = 'This is an elaborate ruse',
  headers = list(
    Accept = 'application/json; text/*',
    Content_Type = 'text/plain'
  )
)

req <- Request$new(fake_rook)

# Get full URL
req$url
#> [1] "http://example.com:80/test?id=34632&question=who+is+hadley"

# Get list of query parameters
req$query
#> $id
#> [1] "34632"
#> 
#> $question
#> [1] "who is hadley"
#> 

# Test if content is text
req$is('txt')
#> [1] TRUE
#> attr(,"pick")
#> [1] 1

# Perform content negotiation for the response
req$accepts(c('html', 'json', 'txt'))
#> [1] "json"

# Cleaning up connections
rm(fake_rook, req)
gc()
#>           used (Mb) gc trigger  (Mb) max used  (Mb)
#> Ncells 1126681 60.2    2194742 117.3  2194742 117.3
#> Vcells 2104004 16.1    8388608  64.0  3004359  23.0