[英]Encoding a GET using OAuth in Ruby Twitter API
我正在尝试编写简单的Ruby on Rails Web应用程序,该应用程序通过oAuth登录到Twitter并获取用户的关注者列表, 而无需使用现有的oAuth库 。 使用位于https://dev.twitter.com/docs/auth/oauth的指南,我设法使登录正常工作,因此有了后续的outh_token和oauth_token_secret。 但是,当尝试对已登录用户的关注者的GET请求进行编码时,我总是收到401“此方法需要身份验证”。
使用我的代码及其示例数据,可以看到我正在正确生成oauth_signature。 我可能生成了不正确的signature_base_string,但是看到它在登录时可以正常工作,所以我看不到第二次怎么可能出错。 这些方法是类的一部分,因此使用者密钥和机密显然是类变量。
相关代码如下。 这是“追随者”中HTTP GET的输出,给出了401。我希望这很荒谬,因为我错过了这么久才发现! 我知道我有正确的值作为参数传递给函数。 谢谢。
def followees(auth_token, auth_token_secret, user_id)
method = 'GET'
base_uri = 'https://api.twitter.com/1/friends/ids.json'
params = {
'cursor' => '-1',
'oauth_consumer_key' => @@consumer_key,
'oauth_nonce' => generate_nonce, #not shown, no need!
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => auth_token,
'oauth_timestamp' => Time.now.to_i.to_s,
'oauth_version' => '1.0',
'user_id' => user_id
}
signature_base_string = signature_base_string(method, base_uri, params)
params['oauth_signature'] = url_encode(sign(@@consumer_secret + '&' + auth_token_secret, signature_base_string))
header = header(params)
base_uri += '?cursor=-1&user_id=' + user_id
url = URI.parse(base_uri)
http = Net::HTTP.new(url.host, 443)
http.use_ssl = true
resp, data = http.get(url.path, { 'Authorization' => header })
end
def signature_base_string(method, uri, params)
encoded_params = params.sort.collect{ |k, v| url_encode("#{k}=#{v}") }.join("%26")
method + '&' + url_encode(uri) + '&' + encoded_params
end
def url_encode(string)
CGI::escape(string)
end
def sign(key, base_string)
digest = OpenSSL::Digest::Digest.new('sha1')
hmac = OpenSSL::HMAC.digest(digest, key, base_string)
Base64.encode64(hmac).chomp.gsub(/\n/, '')
end
def header(params)
header = "OAuth "
params.each do |k, v|
header += "#{k}=\"#{v}\", "
end
header.slice(0..-3)
end
弄清楚了。 需要休息一下才能退后! 基本上,追随者的最后一行不包含GET数据,因此
resp, data = http.get(url.path, { 'Authorization' => header })
应该是
resp, data = http.get(url.to_s, { 'Authorization' => header })
我已经复制了用于发布的代码,因此在那里只使用了url.path。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.