vcr configuration

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.

Set configuration variables

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:

Re-set to defaults

vcr_configure_reset()

Details on some of the config options

dir

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:

record

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:

match_requests_on

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_unused_http_interactions

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:

serialize_with

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:

persist_with

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:

ignoring some requests

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.

uri_parse

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:

preserve_exact_body_bytes

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