req_body_file()
sends a local file.
req_body_raw()
sends a string or raw vector.
req_body_json()
sends JSON encoded data. Named components of this data
can later be modified with req_body_json_modify()
.
req_body_form()
sends form encoded data.
req_body_multipart()
creates a multi-part body.
Adding a body to a request will automatically switch the method to POST.
req_body_raw(req, body, type = NULL)req_body_file(req, path, type = NULL)
req_body_json(
req,
data,
auto_unbox = TRUE,
digits = 22,
null = "null",
type = "application/json",
...
)
req_body_json_modify(req, ...)
req_body_form(.req, ..., .multi = c("error", "comma", "pipe", "explode"))
req_body_multipart(.req, ...)
A modified HTTP request.
A request.
A literal string or raw vector to send as body.
MIME content type. You shouldn't generally need to specify this as
the defaults are usually pretty good, e.g. req_body_file()
will guess it
from the extension of of path
. Will be ignored if you have manually set
a Content-Type
header.
Path to file to upload.
Data to include in body.
Should length-1 vectors be automatically "unboxed" to JSON scalars?
How many digits of precision should numbers use in JSON?
Should NULL
be translated to JSON's null ("null"
)
or an empty list ("list"
).
<dynamic-dots
> Name-data pairs used to send
data in the body.
For req_body_form()
, the values must be strings (or things easily
coerced to strings);
For req_body_multipart()
the values must be strings or objects
produced by curl::form_file()
/curl::form_data()
.
For req_body_json_modify()
, any simple data made from atomic vectors
and lists.
req_body_json()
uses this argument differently; it takes additional
arguments passed on to jsonlite::toJSON()
.
Controls what happens when an element of ...
is a vector
containing multiple values:
"error"
, the default, throws an error.
"comma"
, separates values with a ,
, e.g. ?x=1,2
.
"pipe"
, separates values with a |
, e.g. ?x=1|2
.
"explode"
, turns each element into its own parameter, e.g. ?x=1&x=2
.
If none of these functions work, you can alternatively supply a function that takes a character vector and returns a string.
req <- request(example_url()) |>
req_url_path("/post")
# Most APIs expect small amounts of data in either form or json encoded:
req |>
req_body_form(x = "A simple text string") |>
req_dry_run()
req |>
req_body_json(list(x = "A simple text string")) |>
req_dry_run()
# For total control over the body, send a string or raw vector
req |>
req_body_raw("A simple text string") |>
req_dry_run()
# There are two main ways that APIs expect entire files
path <- tempfile()
writeLines(letters[1:6], path)
# You can send a single file as the body:
req |>
req_body_file(path) |>
req_dry_run()
# You can send multiple files, or a mix of files and data
# with multipart encoding
req |>
req_body_multipart(a = curl::form_file(path), b = "some data") |>
req_dry_run()
Run the code above in your browser using DataLab