Google Cloud Storage在Ruby中毫无理由地返回400个错误请求

时间:2015-11-12 04:40:16

标签: ruby-on-rails ruby google-cloud-storage httparty

我在Ruby on Rails应用程序中使用HTTParty gem来向我的Google Cloud Storage存储桶发出请求。 Google返回状态代码400,说“错误请求”,但没有说明错误原因。我已经确认授权不是问题。这是我的代码:

module Google
  class Client
    include HTTParty
    base_uri "https://www.googleapis.com"

    def get_pics
     self.class.get("/storage/v1/b/bucket-name/o?key=<%= ENV['GOOGLE_KEY'] %>")
    end

  end
end

然后在控制器中:

class WelcomeController < ApplicationController
  def index
    response = Google::Client.new.get_pics
  end
end

以下是我的回复:

#<HTTParty::Response:0x7f8826f71268 parsed_response="<HTML>\n<HEAD>\n<TITLE>Bad Request</TITLE>\n</HEAD>\n<BODY 
BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n<H1>Bad Request</H1>\n<H2>Error 400</H2>\n</BODY>\n</HTML>\n", @response=#<Net::HTTPBadRequest 
400 Bad Request readbody=true>, @headers={"content-type"=>["text/html; 
charset=UTF-8"], "content-length"=>["145"], "date"=>["Thu, 12 Nov 2015 
04:02:14 GMT"], "expires"=>["Thu, 12 Nov 2015 04:02:14 GMT"], 
"cache-control"=>["private, max-age=0"], "x-content-type-options"=>
["nosniff"], "x-frame-options"=>["SAMEORIGIN"], "x-xss-protection"=>["1; mode=block"], 
"server"=>["GSE"], "alternate-protocol"=>["443:quic,p=1"], 
"alt-svc"=>["quic=\":443\"; p=\"1\"; ma=604800"], "connection"=>["close"]}>

1 个答案:

答案 0 :(得分:0)

这可能是很多事情,但最可能的原因是你的密钥无效。您的密钥无效的最常见原因是您不小心使用了服务帐户的“密钥ID”而不是实际的“API密钥”(它们很容易混淆)。

要生成API密钥,请前往http://console.developers.google.com,打开工具栏,选择“API Manager”,然后选择“凭据”页面。忽略“服务帐户密钥”部分下的所有内容,即使它显示“密钥ID”。这些是服务帐户密钥。

而是单击“新凭据”并选择“API密钥”。在弹出窗口中选择“服务器密钥”或“浏览器密钥”(如果您要从rails服务器使用它,则选择服务器密钥,如果它在客户端运行,则选择浏览器)。现在,尝试使用新密钥。