2011-06-28 11 views
0

Ruby On Rails 2.3.8とHTTParty gemを使用してAPIに接続したいと考えています。ダイジェスト認証付きHTTParty

私のモデルは以下の通りです:

class Onnion < ActiveRecord::Base 
    require 'net/http' 
    include HTTParty 

    base_uri 'http://myapiurl.com' 
    digest_auth 'user', 'password' 
    disable_rails_query_string_format 

    def self.create_rma(order) 

    put('/orders/rma', :query => {:action => 'put', :data => {:api_key => 'user', :onnion_order_id => order.id, :customer_rma => order.saving.profile.user.id, :comments => ''}}) 
    end 
end 

私がやりたい何がdataパラメータ内でグループ化、特定のパラメータで、PUTと呼ばれるAPIのメソッドを呼び出すことです。

このメソッドを実行すると、401 Unauthorizedエラーメッセージが表示されます。

私は間違っていますか?このようなことをやろうとするのは初めてです。

答えて

0

あなたはどのバージョンのHTTPartyを使用していますか、Githubの最新バージョンを使用しようとしましたか?しばらく前のバージョン0.7.3でダイジェスト認証セキュリティに関するいくつかの修正がありました。

これでうまくいかない場合は、話しているサーバーがプロトコルに正しく従っていない可能性があります。私はこれが以前に起こっていた、それを正しくログインさせるためにHTTPartyパッチを猿に送っていなければならなかった。私が行った変更は、NC 1としませNC 0を送信するために、また、GETリクエストを行うには、というよりだった

module Net 
    module HTTPHeader 
    class DigestAuthenticator 
     # use NC = 1 instead of 0 
     def authorization_header 
     @cnonce = md5(random) 
     header = [%Q(Digest username="#{@username}"), 
      %Q(realm="#{@response['realm']}"), 
      %Q(nonce="#{@response['nonce']}"), 
      %Q(uri="#{@path}"), 
      %Q(response="#{request_digest}")] 
     [%Q(cnonce="#{@cnonce}"), 
      %Q(opaque="#{@response['opaque']}"), 
      %Q(qop="#{@response['qop']}"), 
      %Q(nc="1")].each { |field| header << field } if qop_present? 
     header 
     end 

    private 
     def request_digest 
     a = [md5(a1), @response['nonce'], md5(a2)] 
     a.insert(2, "1", @cnonce, @response['qop']) if qop_present? 
     md5(a.join(":")) 
     end 
    end 
    end 
end 

module HTTParty 
    class Request 
    def setup_digest_auth 
     # issue a get instead of a head request 
     res = http.get(uri.request_uri, options[:headers]||{}) 
     if res['www-authenticate'] != nil && res['www-authenticate'].length > 0 
     @raw_request.digest_auth(username, password, res) 
     end 
    end 
    end 
end 

...それはあなたのために働くに-場合、私はここで使用するパッチを出してあげますHEAD request in setup_digest_auth

+0

私はバージョン0.7.8を使用しています。だから私はこれをすでに解決しなければならないと思います。 –

関連する問題