我一直在尝试连接到使用摘要式身份验证的 Web 服务。
我可以使用 user:password@service.site.com/endpoint 在 Safari 中连接
我曾尝试在 Ruby 和 Rails 中使用 HTTParty 和 Net:HTTP 使用“基本”身份验证选项进行连接,但没有任何运气。
想知道 HTTParty/Net:HTTP "basic_auth" 选项是否与 "digest auth" 服务不兼容?
如果没有,还有其他方法可以连接吗?
我一直在尝试连接到使用摘要式身份验证的 Web 服务。
我可以使用 user:password@service.site.com/endpoint 在 Safari 中连接
我曾尝试在 Ruby 和 Rails 中使用 HTTParty 和 Net:HTTP 使用“基本”身份验证选项进行连接,但没有任何运气。
想知道 HTTParty/Net:HTTP "basic_auth" 选项是否与 "digest auth" 服务不兼容?
如果没有,还有其他方法可以连接吗?
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
今天无法访问上面给出的代码片段链接,但这里也提供了代码https://gist.github.com/73102。我已经成功地将其用于摘要身份验证,但遇到了多个请求的问题,出现“过时的客户端随机数”错误 - 通过每次调用 digest_auth 函数时生成一个新的随机数来解决。当我看的时候没有找到太多,所以希望这对某人有帮助。