无法使用Ruby中的Typhoeus生成OAuth1授权标头

时间:2016-01-22 05:11:59

标签: ruby oauth typhoeus

我试图通过Typhoeus使用Ruby向Bitbucket的API发送请求,并且我使用来自" OAuth消费者的凭据"页面 - consumer_keyconsumer_secret。我可以很好地获取令牌,但是在尝试从OAuth帮助程序生成标头时出现错误。这是相关代码(请注意,这不是Rails;我使用的是Sinatra):

# oauth_token and oauth_token_secret are from a request to https://bitbucket.org/api/1.0/oauth/request_token
@consumer = OAuth::Consumer.new(
  consumer_key,
  consumer_secret,
)
@token = OAuth::Token.new(oauth_token, oauth_token_secret)
options = {
  method: :post,
  body: body.to_json
}

oauth_params = {:consumer => @consumer, :token => @token}

hydra = Typhoeus::Hydra.new
url = "https://api.bitbucket.org/2.0/repositories/..."
req = Typhoeus::Request.new(url, options)
oauth_helper = OAuth::Client::Helper.new(req, oauth_params.merge(:request_uri => url))
req.options[:headers].merge!({"Authorization" => oauth_helper.header})

最后一行失败,出现OAuth::RequestProxy::UnknownRequestType错误。基本上它的含义是OAuth RequestProxy不理解Typhoeus::Request对象;从我所看到的情况来看,它只支持Net::HTTPGenericRequestHash。 Typhoeus文件表明这应该有效,所以我可能做错了。

或者,有更好的方法吗?我应该使用不同的请求库吗? HTTParty并没有像这样对auth标头提供很好的支持。谢谢!

1 个答案:

答案 0 :(得分:2)

您需要明确要求RequestProxy。

require 'typhoeus'
require 'oauth'
require 'oauth/request_proxy/typhoeus_request'