Method: RestClient::Request#process_cookie_args!
- Defined in:
- lib/restclient/request.rb
#process_cookie_args!(uri, headers, args) ⇒ HTTP::CookieJar
Process cookies passed as hash or as HTTP::CookieJar. For backwards compatibility, these may be passed as a :cookies option masquerading inside the headers hash. To avoid confusion, if :cookies is passed in both headers and Request#initialize, raise an error.
:cookies may be a:
-
Hash=> String
-
Array<HTTP::Cookie>
-
HTTP::CookieJar
Passing as a hash:
Keys may be symbols or strings. Values must be strings.
Infer the domain name from the request URI and allow subdomains (as
though '.example.com' had been set in a Set-Cookie header). Assume a
path of '/'.
RestClient::Request.new(url: 'http://example.com', method: :get,
:cookies => {:foo => 'Value', 'bar' => '123'}
)
results in cookies as though set from the server by:
Set-Cookie: foo=Value; Domain=.example.com; Path=/
Set-Cookie: bar=123; Domain=.example.com; Path=/
which yields a client cookie header of:
Cookie: foo=Value; =123
Passing as HTTP::CookieJar, which will be passed through directly:
jar = HTTP::CookieJar.new
jar.add(HTTP::Cookie.new('foo', 'Value', domain: 'example.com',
path: '/', for_domain: false))
RestClient::Request.new(..., :cookies => jar)
infer the domain name for cookies passed as strings in a hash. To avoid this implicit behavior, pass a full cookie jar or use HTTP::Cookie hash values.
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 |
# File 'lib/restclient/request.rb', line 319 def (uri, headers, args) # Avoid ambiguity in whether options from headers or options from # Request#initialize should take precedence by raising ArgumentError when # both are present. Prior versions of rest-client claimed to give # precedence to init options, but actually gave precedence to headers. # Avoid that mess by erroring out instead. if headers[:cookies] && args[:cookies] raise ArgumentError.new( "Cannot pass :cookies in Request.new() and in headers hash") end = headers.delete(:cookies) || args[:cookies] # return copy of cookie jar as is if .is_a?(HTTP::CookieJar) return .dup end # convert cookies hash into a CookieJar jar = HTTP::CookieJar.new ( || []).each do |key, val| # Support for Array<HTTP::Cookie> mode: # If key is a cookie object, add it to the jar directly and assert that # there is no separate val. if key.is_a?(HTTP::Cookie) if val raise ArgumentError.new("extra cookie val: #{val.inspect}") end jar.add(key) next end if key.is_a?(Symbol) key = key.to_s end # assume implicit domain from the request URI, and set for_domain to # permit subdomains jar.add(HTTP::Cookie.new(key, val, domain: uri.hostname.downcase, path: '/', for_domain: true)) end jar end |