Skip to content
  • req_body_file() sends a local file.

  • req_body_raw() sends a string or raw vector.

  • req_body_json() sends JSON encoded data.

  • 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.

Usage

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", ...)

req_body_form(.req, ...)

req_body_multipart(.req, ...)

Arguments

req, .req

A request.

body

A literal string or raw vector to send as body.

type

Content type. For req_body_file(), the default will will attempt to guess from the extension of path.

path

Path to file to upload.

data

Data to include in body.

auto_unbox

Should length-1 vectors be automatically "unboxed" to JSON scalars?

digits

How many digits of precision should numbers use in JSON?

null

Should NULL be translated to JSON's null ("null") or an empty list ("list").

...

Name-data pairs used send data in the body. For req_body_form(), the values must be strings (or things easily coerced to string); for req_body_multipart() the values must be strings or objects produced by curl::form_file()/curl::form_data().

For req_body_json(), additional arguments passed on to jsonlite::toJSON().

Value

A modified HTTP request.

Examples

req <- request("http://httpbin.org/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()
#> POST /post HTTP/1.1
#> Host: httpbin.org
#> User-Agent: httr2/0.2.1.9000 r-curl/4.3.2 libcurl/7.68.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br
#> Content-Type: application/x-www-form-urlencoded
#> Content-Length: 28
#> 
#> x=A%20simple%20text%20string

req %>%
  req_body_json(list(x = "A simple text string")) %>%
  req_dry_run()
#> POST /post HTTP/1.1
#> Host: httpbin.org
#> User-Agent: httr2/0.2.1.9000 r-curl/4.3.2 libcurl/7.68.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br
#> Content-Type: application/json
#> Content-Length: 28
#> 
#> {"x":"A simple text string"}

# For total control over the body, send a string or raw vector
req %>%
  req_body_raw("A simple text string") %>%
  req_dry_run()
#> POST /post HTTP/1.1
#> Host: httpbin.org
#> User-Agent: httr2/0.2.1.9000 r-curl/4.3.2 libcurl/7.68.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br
#> Content-Length: 20
#> 
#> A simple text string

# 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()
#> POST /post HTTP/1.1
#> Host: httpbin.org
#> User-Agent: httr2/0.2.1.9000 r-curl/4.3.2 libcurl/7.68.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br
#> Content-Length: 12
#> 
#> a
#> b
#> c
#> d
#> e
#> f

# 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()
#> POST /post HTTP/1.1
#> Host: httpbin.org
#> User-Agent: httr2/0.2.1.9000 r-curl/4.3.2 libcurl/7.68.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br
#> Content-Length: 315
#> Content-Type: multipart/form-data; boundary=------------------------d0d5fcfa96c6fab8
#> 
#> --------------------------d0d5fcfa96c6fab8
#> Content-Disposition: form-data; name="a"; filename="file280af613beb"
#> Content-Type: application/octet-stream
#> 
#> a
#> b
#> c
#> d
#> e
#> f
#> 
#> --------------------------d0d5fcfa96c6fab8
#> Content-Disposition: form-data; name="b"
#> 
#> some data
#> --------------------------d0d5fcfa96c6fab8--