docs/configuration/uri_parser.md
By default, VCR will parse URIs using URI from the Ruby standard
library. There are some URIs seen out in the wild that URI cannot
parse properly. You can set the uri_parser configuration option
to use a different parser (such as Addressable::URI) to work with
these URIs.
The configured URI parser needs to expose a .parse class method
that returns an instance of the uri. This uri instance needs to
implement the following API:
#scheme => a string#host => a string#port => a fixnum#path => a string#query => a string#to_s => a string#port=#query=#== => booleanGiven a file named "cassettes/example.yml" with:
---
http_interactions:
- request:
method: get
uri: http://example.com/hello
body:
encoding: UTF-8
string: ""
headers: {}
response:
status:
code: 200
message: OK
headers:
Content-Length:
- "5"
body:
encoding: UTF-8
string: Hello
http_version: "1.1"
recorded_at: Tue, 25 Sep 2012 04:58:44 GMT
recorded_with: VCR 2.2.5
uri_parserGiven a file named "uri_parser.rb" with:
require 'vcr'
require 'uri'
module MyURI
def self.parse(url)
uri = URI.parse(url)
uri.host = 'example.com'
uri.path = '/hello'
uri
end
end
VCR.configure do |c|
c.uri_parser = MyURI
c.hook_into :webmock
c.cassette_library_dir = 'cassettes'
end
VCR.use_cassette('example') do
puts Net::HTTP.get_response('evil.org', '/projects').body
end
When I run ruby uri_parser.rb
Then it should pass with "Hello".
uri_parser defaults to the standard library's URIGiven a file named "uri_parser_default.rb" with:
require 'vcr'
VCR.configure do |c|
c.hook_into :webmock
c.cassette_library_dir = 'cassettes'
end
VCR.use_cassette('example') do
puts Net::HTTP.get_response('example.com', '/hello').body
end
When I run ruby uri_parser_default.rb
Then it should pass with "Hello".