Feature #11322 ยป open_uri-redirect-cookie-11322.patch
| lib/open-uri.rb | ||
|---|---|---|
|
uri_set = {}
|
||
|
buf = nil
|
||
|
while true
|
||
|
redirect = catch(:open_uri_redirect) {
|
||
|
redirect, cookie = catch(:open_uri_redirect) {
|
||
|
buf = Buffer.new
|
||
|
uri.buffer_open(buf, find_proxy.call(uri), options)
|
||
|
nil
|
||
| ... | ... | |
|
options = options.dup
|
||
|
options.delete :http_basic_authentication
|
||
|
end
|
||
|
if cookie
|
||
|
options = options.dup
|
||
|
options[:cookie] = cookie.split(';')[0]
|
||
|
end
|
||
|
uri = redirect
|
||
|
raise "HTTP redirection loop: #{uri}" if uri_set.include? uri.to_s
|
||
|
uri_set[uri.to_s] = true
|
||
|
raise "HTTP redirection loop: #{uri}" if uri_set.include?([uri.to_s, !!cookie])
|
||
|
uri_set[[uri.to_s, !!cookie]] = true
|
||
|
else
|
||
|
break
|
||
|
end
|
||
| ... | ... | |
|
resp = nil
|
||
|
http.start {
|
||
|
if cookie = options[:cookie]
|
||
|
header['Cookie'] = cookie
|
||
|
end
|
||
|
req = Net::HTTP::Get.new(request_uri, header)
|
||
|
if options.include? :http_basic_authentication
|
||
|
user, pass = options[:http_basic_authentication]
|
||
| ... | ... | |
|
rescue URI::InvalidURIError
|
||
|
raise OpenURI::HTTPError.new(io.status.join(' ') + ' (Invalid Location URI)', io)
|
||
|
end
|
||
|
throw :open_uri_redirect, loc_uri
|
||
|
throw :open_uri_redirect, [loc_uri, resp['Set-Cookie']]
|
||
|
else
|
||
|
raise OpenURI::HTTPError.new(io.status.join(' '), io)
|
||
|
end
|
||