OAuth gem未签署请求

时间:2012-02-24 17:46:33

标签: ruby oauth

我正在使用ruby gem for OAuth(http://oauth.rubyforge.org/),我无法让它为我试图访问的提供者创建授权标题。

这是我的代码:

consumer = OAuth::Consumer.new(auth[:consumer_key], auth[:consumer_secret], {
  :site   => 'http://api.rdio.com',
  :scheme => :header
})

access_token = OAuth::AccessToken.new(consumer)

ap access_token.post('/1', :method => 'search', :query => 'Robert', :types => 'User')

当请求发生时,呼叫中不存在标题。

#<Net::HTTP::Post:0x7fbf149e91e0
    @body_data = nil,
    @header = {
                "accept" => [
            [0] "*/*"
        ],
            "user-agent" => [
            [0] "Ruby"
        ],
        "content-length" => [
            [0] "0"
        ],
          "content-type" => [
            [0] "application/x-www-form-urlencoded"
        ]
    },

我所指的标题是看起来像这样的标题:

OAuth oauth_nonce=\"225579211881198842005988698334675835446\", oauth_signature_method=\"HMAC-SHA1\", oauth_token=\"token_411a7f\", oauth_timestamp=\"1199645624\", oauth_consumer_key=\"consumer_key_86cad9\", oauth_signature=\"1oO2izFav1GP4kEH2EskwXkCRFg%3D\", oauth_version=\"1.0\"

1 个答案:

答案 0 :(得分:2)

看起来你正试图做两条腿的oauth。看看这段代码是否适合你。

修改:更新了代码示例

gem 'oauth'
require 'oauth'
require 'net/http'

consumer = OAuth::Consumer.new('ENTER_KEY', 'ENTER_SECRET', {        
                                :site   => 'http://api.rdio.com',        
                                :scheme => :header        
}) 

resp = consumer.request(:post, '/1/search', nil, {}, 'method=search&query=Robert&types=User', { 'Content-Type' => 'application/x-www-form-urlencoded' })
puts resp.code + "\r\n"
puts resp.body

编辑:添加已捕获的http流

POST /1/search HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept: */*
User-Agent: OAuth gem v0.4.5
Content-Length: 37
Authorization: OAuth oauth_consumer_key="REDACTED_KEY", oauth_nonce="dwp8m2TGPHQNx3A7imLi7OkAULL7c0IWbTKefPXCsAY", oauth_signature="LxDZn6UNFLY%2FaXItu6MPK5a11js%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1330193449", oauth_version="1.0"
Connection: close
Host: api.rdio.com

method=search&query=Robert&types=UserHTTP/1.1 200 OK
X-Mashery-Responder: mashery-web1.LAX
Content-Type: application/json
Vary: Accept-Encoding
Vary: Accept-Language, Cookie
Content-Language: en
Cache-Control: no-cache
X-Version: 11.1
Accept-Ranges: bytes
Date: Sat, 25 Feb 2012 18:10:50 GMT
Server: Mashery Proxy
Content-Length: 2763
Connection: close

{"status": "ok", "result": {"person_count": 9603, "track_count": 93409, "number_results": 200, "playlist_count": 205, "results": ***TRUNCATED RESULTS FOR BREVITY***