Sha256: a690fb2372ee45622cc82808ccb6801ec1e0f6c9f4ec3f8abdda30b58dbde92d
Contents?: true
Size: 1.72 KB
Versions: 2
Compression:
Stored size: 1.72 KB
Contents
module Excon module Middleware class RedirectFollower < Excon::Middleware::Base def response_call(datum) if datum.has_key?(:response) case datum[:response][:status] when 301, 302, 303, 307, 308 uri_parser = datum[:uri_parser] || Excon.defaults[:uri_parser] _, location = datum[:response][:headers].detect do |key, value| key.casecmp('Location') == 0 end uri = uri_parser.parse(location) # delete old/redirect response response = datum.delete(:response) params = datum.dup params.delete(:stack) params.delete(:connection) params[:method] = :get if [301, 302, 303].include? response[:status] params[:headers] = datum[:headers].dup params[:headers].delete('Authorization') params[:headers].delete('Proxy-Connection') params[:headers].delete('Proxy-Authorization') params[:headers].delete('Host') params.merge!( :scheme => uri.scheme || datum[:scheme], :host => uri.host || datum[:host], :port => uri.port || datum[:port], :path => uri.path, :query => uri.query ) params.merge!(:user => Utils.unescape_uri(uri.user)) if uri.user params.merge!(:password => Utils.unescape_uri(uri.password)) if uri.password response = Excon::Connection.new(params).request datum.merge!({:response => response.data}) else @stack.response_call(datum) end else @stack.response_call(datum) end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
excon-0.43.0 | lib/excon/middlewares/redirect_follower.rb |
excon-0.42.1 | lib/excon/middlewares/redirect_follower.rb |