来自服务器的Ruby POST调用失败

时间:2015-02-10 22:47:22

标签: ruby sinatra spotify

我正在尝试使用ruby创建一个spotify Web管理器,以使我遵循Authorization Guide

我的后端看起来类似于这个github中spotify的家伙所做的例子。你可以在这里看到code here

所以我得到的错误是400 - 错误的请求或415 - 不支持的媒体类型。

起初我使用的是net / http核心库,但是因为我做错了,我使用了Typhoeus,结果是一样的。

这是代码无效:

request = Typhoeus::Request.new("https://accounts.spotify.com/api/token",
  method: :post,
  body: { 
    grant_type: "authorization_code",
    code: code,
    redirect_uri: "http://localhost:5000/auth/spotify/callback"
  },
  headers: { 
    "Authorization": "Basic #{Base64.strict_encode64("#{settings.spotify_id}:#{settings.spotify_key}")}"
  },
  followlocation: true
)

logger.info request.inspect

request.on_complete do |response|
  logger.info "[]" * 100
  logger.info response
  if response.success?
    logger.info "SUCCESS"
  elsif response.timed_out?
    logger.info "TIMED OUT"
  elsif response.code == 0
    logger.info response.return_message
  else
    logger.info "HTTP request failed: #{response.code.to_s}"
    redirect '/auth/failure'
  end
end

request.run

好吧,如果你们中有人知道发生了什么事情,那么了解它会很有帮助。

提前致谢。

修改

字符串插值工作正常,已经在控制台上测试过。

"Basic #{Base64.strict_encode64("#{settings.spotify_id}:#{settings.spotify_key}")}"

关于 redirect_uri ,必须运行良好,有一点因为本指南用localhost示例解释,其次,Authorization Guide上解释的第一个请求工作正常,问题当我试图在该指南上做4步时发生。

2 个答案:

答案 0 :(得分:0)

你确定那种字符串插值有效吗?您是否看过wireshark中的流量以查看它是否正常工作?它看起来很可疑,因为你在双引号中使用双引号仍然期望它能够工作。如果您不想设置wireshark,请让您的应用程序在控制台上发布请求文本。此外,你确定Spotify会允许redirect_uri与localhost一起使用吗?此外,你什么时候得到400,你什么时候得到415?这是重要的信息,你不能只是把它们混为一谈。

答案 1 :(得分:0)

我已经改变了HTTParty的Typhoeus宝石,现在错误变得更加清晰了。

这里的主要内容不是400或415错误,是附加到此错误的消息。这里的错误是:

"error"=>"invalid_grant", "error_description"=>"Invalid authorization code"

所以,我没有意识到这一点,但我不明白这个消息,有时疲劳和挫折让你看不到明显的信息。

现在,只需知道为什么认证。代码无效。

无论如何,谢谢你的帮助。