3

我一直在尝试连接到使用摘要式身份验证的 Web 服务。

我可以使用 user:password@service.site.com/endpoint 在 Safari 中连接

我曾尝试在 Ruby 和 Rails 中使用 HTTParty 和 Net:HTTP 使用“基本”身份验证选项进行连接,但没有任何运气。

想知道 HTTParty/Net:HTTP "basic_auth" 选项是否与 "digest auth" 服务不兼容?

如果没有,还有其他方法可以连接吗?

4

2 回答 2

2

HTTParty 基本身份验证显然与 digest_auth 不兼容。我找到了这个 Net:HTTP 扩展:https ://codesnippets.joyent.com/posts/show/1075 并在 Crack gem http://github.com/jnunemaker/crack的帮助下编写了一种方法来处理这个问题:

 def self.decode vin
    url = URI.parse(APP_CONFIG[:vinlink_url])
    Net::HTTP.start(url.host) do |http|
      res = http.head(url.request_uri)
      req = Net::HTTP::Get.new("/report?type=basic&vin=#{vin}")
      req.digest_auth(APP_CONFIG[:vinlink_login], APP_CONFIG[:vinlink_password], res)
      @response = http.request(req)
    end
    if @response.code == "200"
      hash = Crack::XML.parse(@response.body).recursive_downcase_keys!.recursive_symbolize_keys!
    end
  end  
于 2010-01-09T19:10:52.500 回答
0

今天无法访问上面给出的代码片段链接,但这里也提供了代码https://gist.github.com/73102。我已经成功地将其用于摘要身份验证,但遇到了多个请求的问题,出现“过时的客户端随机数”错误 - 通过每次调用 digest_auth 函数时生成一个新的随机数来解决。当我看的时候没有找到太多,所以希望这对某人有帮助。

于 2012-05-17T21:20:13.000 回答