# File lib/oauth2/client.rb, line 85
    def request(verb, url, opts={})
      url = self.connection.build_url(url, opts[:params]).to_s

      response = connection.run_request(verb, url, opts[:body], opts[:headers]) do |req|
        yield(req) if block_given?
      end
      response = Response.new(response, :parse => opts[:parse])

      case response.status
      when 200..299
        response
      when 300..399
        opts[:redirect_count] ||= 0
        opts[:redirect_count] += 1
        return response if opts[:redirect_count] > options[:max_redirects]
        if response.status == 303
          verb = :get
          opts.delete(:body)
        end
        request(verb, response.headers['location'], opts)
      when 400..599
        e = Error.new(response)
        raise e if opts[:raise_errors] || options[:raise_errors]
        response.error = e
        response
      else
        raise Error.new(response), "Unhandled status code value of #{response.status}"
      end
    end