vcr
configuration
library("vcr")
library("vcr")
You can also get the default configuration variables via vcr_config_defaults()
vcr_config_defaults()
#> $verbose_errors
#> [1] FALSE
#>
#> $write_disk_path
#> NULL
#>
#> $filter_response_headers
#> NULL
#>
#> $filter_request_headers
#> NULL
#>
#> $filter_sensitive_data
#> NULL
#>
#> $log_opts
#> $log_opts$file
#> [1] "vcr.log"
#>
#> $log_opts$log_prefix
#> [1] "Cassette"
#>
#> $log_opts$date
#> [1] TRUE
#>
#>
#> $log
#> [1] FALSE
#>
#> $linked_context
#> NULL
#>
#> $cassettes
#> list()
#>
#> $allow_http_connections_when_no_cassette
#> [1] FALSE
#>
#> $clean_outdated_http_interactions
#> [1] FALSE
#>
#> $re_record_interval
#> NULL
#>
#> $turned_off
#> [1] FALSE
#>
#> $preserve_exact_body_bytes
#> [1] FALSE
#>
#> $uri_parser
#> [1] "crul::url_parse"
#>
#> $ignore_request
#> NULL
#>
#> $ignore_localhost
#> [1] FALSE
#>
#> $ignore_hosts
#> NULL
#>
#> $persist_with
#> [1] "FileSystem"
#>
#> $json_pretty
#> [1] FALSE
#>
#> $serialize_with
#> [1] "yaml"
#>
#> $allow_unused_http_interactions
#> [1] TRUE
#>
#> $match_requests_on
#> [1] "method" "uri"
#>
#> $record
#> [1] "once"
#>
#> $dir
#> [1] "."
These defaults are set when you load vcr
- you can override any of them as described below.
Use vcr_configure()
to set configuration variables.
For example, set a single variable:
vcr_configure(
dir = "foobar/vcr_cassettes"
)
#> <vcr configuration>
#> Cassette Dir: foobar/vcr_cassettes
#> Record: once
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: method, uri
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts:
#> ignore localhost?: FALSE
#> Write disk path:
Or many at once:
vcr_configure(
dir = "foobar/vcr_cassettes",
record = "all"
)
#> <vcr configuration>
#> Cassette Dir: foobar/vcr_cassettes
#> Record: all
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: method, uri
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts:
#> ignore localhost?: FALSE
#> Write disk path:
vcr_configure_reset()
Directory where cassettes are stored
vcr_configure(dir = "new/path")
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: once
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: method, uri
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts:
#> ignore localhost?: FALSE
#> Write disk path:
The record mode
One of: ‘all’, ‘none’, ‘new_episodes’, ‘once’. See ?recording
for info on the options
vcr_configure(record = "new_episodes")
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: new_episodes
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: method, uri
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts:
#> ignore localhost?: FALSE
#> Write disk path:
Customize how vcr
matches requests
vcr_configure(match_requests_on = c('query', 'headers'))
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: new_episodes
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: query, headers
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts:
#> ignore localhost?: FALSE
#> Write disk path:
Allow HTTP connections when no cassette
Default is TRUE
, and thus does not error when http interactions are unused. You can set to FALSE
in which case vcr errors when a cassette is ejected and not all http interactions have been used.
vcr_configure(allow_unused_http_interactions = FALSE)
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: new_episodes
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: query, headers
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts:
#> ignore localhost?: FALSE
#> Write disk path:
Which serializer to use. Right now only option is “yaml”
vcr_configure(serialize_with = "yaml")
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: new_episodes
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: query, headers
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts:
#> ignore localhost?: FALSE
#> Write disk path:
Which persister to use. Right now only option is “FileSystem”
vcr_configure(persist_with = "FileSystem")
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: new_episodes
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: query, headers
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts:
#> ignore localhost?: FALSE
#> Write disk path:
ignore_hosts
Specify particular hosts to ignore. By ignore, we mean that real HTTP requests to the ignored host will be allowed to occur, while all others will not.
vcr_configure(ignore_hosts = "google.com")
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: new_episodes
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: query, headers
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts: google.com
#> ignore localhost?: FALSE
#> Write disk path:
ignore_localhost
Ignore all localhost requests
vcr_configure(ignore_localhost = TRUE)
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: new_episodes
#> Serialize with: yaml
#> URI Parser: crul::url_parse
#> Match Requests on: query, headers
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts: google.com
#> ignore localhost?: TRUE
#> Write disk path:
ignore_request
THIS DOESN’T WORK YET
How to ignore requests
For ignoring requests, you can for example, have real http requests go through (ignored by vcr
) while other requests are handled by vcr
. For example, let’s say you want requests to google.com
to be ignored:
vcr_configure(ignore_hosts = "google.com")
use_cassette("foo_bar", {
crul::HttpClient$new("https://httpbin.org/get")$get()
crul::HttpClient$new("https://google.com")$get()
})
The request to httpbin.org will be handled by vcr
, a cassette created for the request/response to that url, while the google.com request will be ignored and not cached at all.
Note: ignoring requests only works for the crul
package for now; it should work for httr
in a later vcr
version.
Which uri parser to use
By default we use crul::url_parse
, but you can use a different one. Remember to pass in the function quoted, and namespaced.
vcr_configure(uri_parser = "urltools::url_parse")
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: new_episodes
#> Serialize with: yaml
#> URI Parser: urltools::url_parse
#> Match Requests on: query, headers
#> Preserve Bytes?: FALSE
#> Logging?: FALSE
#> ignored hosts: google.com
#> ignore localhost?: TRUE
#> Write disk path:
Some HTTP servers are not well-behaved and respond with invalid data. Set preserve_exact_body_bytes
to TRUE
to base64 encode the result body in order to preserve the bytes exactly as-is. vcr
does not do this by default, since base64-encoding the string removes the human readability of the cassette.
vcr_configure(preserve_exact_body_bytes = TRUE)
#> <vcr configuration>
#> Cassette Dir: new/path
#> Record: new_episodes
#> Serialize with: yaml
#> URI Parser: urltools::url_parse
#> Match Requests on: query, headers
#> Preserve Bytes?: TRUE
#> Logging?: FALSE
#> ignored hosts: google.com
#> ignore localhost?: TRUE
#&g