1

我有以下类执行一些请求:

  • 第一个请求使用摘要身份验证
  • 第二个请求使用基本身份验证

当我运行第二个请求时,出现以下错误:

only one authentication method, :basic_auth or :digest_auth may be used at a time

如何digest_auth在运行第二个请求之前使之前无效?

class Test
  include HTTParty
  debug_output $stdout
  digest_auth 'login', 'pass'

  def first_request(href)
    self.class.base_uri "SERVER:PORT"
    response = self.class.get(href, {:query => {}})
    response
  end

  def second_request(href)
    auth = {:username => "USERNAME", :password => "PASSWORD"}
    options = { :body => xml_string, :basic_auth => auth }
    response = self.class.post('', options)
    response
  end
end
4

1 回答 1

3

当您使用basic_authordigest_auth时,HTTParty 将信息内部存储在@default_options哈希中。这是来源basic_auth

# 文件'lib/httparty.rb',第 102 行

def basic_auth(u, p)
  default_options[:basic_auth] = {:username => u, :password => p}
结尾

您可以使用以下default_options方法访问该哈希:

# 文件“lib/httparty.rb”,第 452 行

def default_options #:nodoc:
  @default_options
结尾

我会尝试:

default_options.delete(:basic_auth)

或者:

default_options.delete(:digest_auth)

在使用其他身份验证方法之前。

这是未经测试的代码,但看起来很正确:

class Test
  include HTTParty
  debug_output $stdout

  def first_request(href)
    klass = self.class
    klass.base_uri "SERVER:PORT"
    klass.default_options.delete(:basic_auth)
    klass.digest_auth 'login', 'pass'
    klass.get(href, {:query => {}})
  end

  def second_request(href)
    klass = self.class
    klass.default_options.delete(:digest_auth)
    klass.post(
      '',
      {
        :body => xml_string,
        :basic_auth => {
          :username => "USERNAME",
          :password => "PASSWORD"
        }
      }
    )
  end
end
于 2013-05-24T18:08:41.853 回答