Sha256: 09374338fcb0cdb16ff19d8dec05b9e651ee721697c19912a0a8658a7931ce1c

Contents?: true

Size: 1.68 KB

Versions: 19

Compression:

Stored size: 1.68 KB

Contents

module Excon
  module Middleware
    class RedirectFollower < Excon::Middleware::Base
      def response_call(datum)
        if datum.has_key?(:response) && [:get, :head].include?(datum[:method].to_s.downcase.to_sym)
          case datum[:response][:status]
          when 301, 302, 303, 307
            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
            datum.delete(:response)

            params = datum.dup
            params.delete(:stack)
            params.delete(:connection)
            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,
              :user       => (Utils.unescape_uri(uri.user) if uri.user),
              :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

19 entries across 19 versions & 1 rubygems

Version Path
excon-0.41.0 lib/excon/middlewares/redirect_follower.rb
excon-0.40.0 lib/excon/middlewares/redirect_follower.rb
excon-0.39.6 lib/excon/middlewares/redirect_follower.rb
excon-0.39.5 lib/excon/middlewares/redirect_follower.rb
excon-0.39.4 lib/excon/middlewares/redirect_follower.rb
excon-0.39.3 lib/excon/middlewares/redirect_follower.rb
excon-0.39.2 lib/excon/middlewares/redirect_follower.rb
excon-0.39.1 lib/excon/middlewares/redirect_follower.rb
excon-0.39.0 lib/excon/middlewares/redirect_follower.rb
excon-0.38.0 lib/excon/middlewares/redirect_follower.rb
excon-0.37.0 lib/excon/middlewares/redirect_follower.rb
excon-0.36.0 lib/excon/middlewares/redirect_follower.rb
excon-0.35.0 lib/excon/middlewares/redirect_follower.rb
excon-0.34.0 lib/excon/middlewares/redirect_follower.rb
excon-0.33.0 lib/excon/middlewares/redirect_follower.rb
excon-0.32.1 lib/excon/middlewares/redirect_follower.rb
excon-0.32.0 lib/excon/middlewares/redirect_follower.rb
excon-0.31.0 lib/excon/middlewares/redirect_follower.rb
excon-0.30.0 lib/excon/middlewares/redirect_follower.rb