Skip to content

req_headers() allows you to set the value of any header.

req_headers_redacted() is a variation that adds "redacted" headers, which httr2 avoids printing on the console. This is good practice for authentication headers to avoid accidentally leaking them in log files.

Usage

req_headers(.req, ..., .redact = NULL)

req_headers_redacted(.req, ...)

Arguments

.req

A request.

...

<dynamic-dots> Name-value pairs of headers and their values.

  • Use NULL to reset a value to httr2's default

  • Use "" to remove a header

  • Use a character vector to repeat a header.

.redact

Headers to redact. If NULL, the default, the added headers are not redacted.

Value

A modified HTTP request.

Examples

req <- request("http://example.com")

# Use req_headers() to add arbitrary additional headers to the request
req |>
  req_headers(MyHeader = "MyValue") |>
  req_dry_run()
#> GET / HTTP/1.1
#> Host: example.com
#> User-Agent: httr2/1.1.0.9000 r-curl/6.1.0 libcurl/8.5.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br, zstd
#> MyHeader: MyValue
#> 

# Repeated use overrides the previous value:
req |>
  req_headers(MyHeader = "Old value") |>
  req_headers(MyHeader = "New value") |>
  req_dry_run()
#> GET / HTTP/1.1
#> Host: example.com
#> User-Agent: httr2/1.1.0.9000 r-curl/6.1.0 libcurl/8.5.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br, zstd
#> MyHeader: New value
#> 

# Setting Accept to NULL uses curl's default:
req |>
  req_headers(Accept = NULL) |>
  req_dry_run()
#> GET / HTTP/1.1
#> Host: example.com
#> User-Agent: httr2/1.1.0.9000 r-curl/6.1.0 libcurl/8.5.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br, zstd
#> 

# Setting it to "" removes it:
req |>
  req_headers(Accept = "") |>
  req_dry_run()
#> GET / HTTP/1.1
#> Host: example.com
#> User-Agent: httr2/1.1.0.9000 r-curl/6.1.0 libcurl/8.5.0
#> Accept-Encoding: deflate, gzip, br, zstd
#> 

# If you need to repeat a header, provide a vector of values
# (this is rarely needed, but is important in a handful of cases)
req |>
  req_headers(HeaderName = c("Value 1", "Value 2", "Value 3")) |>
  req_dry_run()
#> GET / HTTP/1.1
#> Host: example.com
#> User-Agent: httr2/1.1.0.9000 r-curl/6.1.0 libcurl/8.5.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br, zstd
#> HeaderName: Value 1
#> HeaderName: Value 2
#> HeaderName: Value 3
#> 

# If you have headers in a list, use !!!
headers <- list(HeaderOne = "one", HeaderTwo = "two")
req |>
  req_headers(!!!headers, HeaderThree = "three") |>
  req_dry_run()
#> GET / HTTP/1.1
#> Host: example.com
#> User-Agent: httr2/1.1.0.9000 r-curl/6.1.0 libcurl/8.5.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br, zstd
#> HeaderOne: one
#> HeaderTwo: two
#> HeaderThree: three
#> 

# Use `req_headers_redacted()`` to hide a header in the output
req_secret <- req |>
  req_headers_redacted(Secret = "this-is-private") |>
  req_headers(Public = "but-this-is-not")

req_secret
#> <httr2_request>
#> GET http://example.com
#> Headers:
#>Secret: "<REDACTED>"
#>Public: "but-this-is-not"
#> Body: empty
req_secret |> req_dry_run()
#> GET / HTTP/1.1
#> Host: example.com
#> User-Agent: httr2/1.1.0.9000 r-curl/6.1.0 libcurl/8.5.0
#> Accept: */*
#> Accept-Encoding: deflate, gzip, br, zstd
#> Secret: <REDACTED>
#> Public: but-this-is-not
#>