Попытка подключиться к веб-сервису «дайджест-аутентификации» с помощью HTTParty или Net:HTTP (или т. д.)
Вопрос
Я пытаюсь подключиться к веб-службе, использующей дайджест-аутентификацию.
Я могу подключиться в Safari, используя пользователя: пароль@service.site.com/endpoint.
Я пытался в Ruby и Rails подключиться с помощью HTTParty и Net:HTTP, используя параметры «базовой аутентификации», но безуспешно.
Хотите знать, не будет ли опция HTTParty/Net:HTTP «basic_auth» совместима со службой «дайджест-аутентификации»?
Если нет, есть ли другой способ подключения?
Решение
Базовая аутентификация HTTParty, по-видимому, несовместима с дайджест_аутентификацией.Я нашел это расширение Net:HTTP: https://codesnippets.joyent.com/posts/show/1075 и я пишу метод, позволяющий справиться с этим, с помощью драгоценного камня Crack. 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.Я успешно использовал это для дайджест-аутентификации, но столкнулся с проблемами с множественными запросами, получая ошибки «Устаревший клиентский одноразовый номер», которые были решены путем создания нового одноразового номера в функции дайджеста_auth каждый раз, когда он вызывался.Когда я смотрел, я не нашел многого об этом, так что надеюсь, что это кому-то поможет.