Попытка подключиться к веб-сервису «дайджест-аутентификации» с помощью HTTParty или Net:HTTP (или т. д.)

StackOverflow https://stackoverflow.com/questions/2032166

Вопрос

Я пытаюсь подключиться к веб-службе, использующей дайджест-аутентификацию.

Я могу подключиться в 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 каждый раз, когда он вызывался.Когда я смотрел, я не нашел многого об этом, так что надеюсь, что это кому-то поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top