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

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

Я могу подключиться в Safari, используя user:[email protected]/endpoint

Я пытался в Ruby и Rails подключиться с помощью HTTParty и Net:HTTP, используя «базовые» параметры аутентификации, но безуспешно.

Хотите знать, не будет ли опция HTTParty/Net:HTTP «basic_auth» совместима со службой «дайджест-аутентификации»?

Если нет, есть ли другой способ подключения?


person Gordon Isnor    schedule 09.01.2010    source источник
comment
Пример кода довольно полезен.   -  person Ryan Bigg    schedule 09.01.2010
comment
Я использую примеры HTTParty http://rdoc.info/projects/jnunemaker/httparty.   -  person Gordon Isnor    schedule 09.01.2010
comment
РАБОТАЕТ: wget 'user:[email protected]/report? vin=vin&type=basic' НЕ РАБОТАЕТ: httparty -u user:password 'service.vinlink.com/report?vin=vin&type=basic'   -  person Gordon Isnor    schedule 09.01.2010


Ответы (2)


Базовая аутентификация HTTParty, по-видимому, несовместима с дайджест_auth. Я нашел это расширение 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  
person Gordon Isnor    schedule 09.01.2010

Сегодня не удалось получить доступ к приведенной выше ссылке codenippets, но код также доступен здесь https://gist.github.com/73102. Я успешно использовал это для дайджест-аутентификации, но столкнулся с проблемами с несколькими запросами, получая ошибки «Устаревший одноразовый номер клиента», которые решаются путем создания нового одноразового номера в функции дайджеста_auth каждый раз, когда он вызывается. Когда я смотрел, не нашел многого, так что надеюсь, что это кому-то поможет.

person Chrissy H    schedule 17.05.2012