Google Drive API监视400错误Ruby on Rails
我正在使用OAuth2 gem(ruby on rails)实现google驱动器api。 我没有使用客户端库,因为我也在集成其他API,所以我试图将所有这些调用尽可能地模块化。 我遇到了这个请求的问题: POST https://www.googleapis.com/drive/v2/changes/watch 。
我一直收到这个错误:
{"errors"=>[{"domain"=>"global", "reason"=>"required", "message"=>"entity.resource"}], "code"=>400, "message"=>"entity.resource"}: { "error": { "errors": [ { "domain": "global", "reason": "required", "message": "entity.resource" } ], "code": 400, "message": "entity.resource" } }
这不是很有用。 它可能不是谷歌。 它可能是OAuth2,但我不这么认为,因为调试器在建立连接后会得到响应。 好吧,在这一点上,我什么都不知道,所以任何帮助都表示赞赏。 有这个GUY谁有与我完全相同的错误代码,以及相同的结论。
无论如何,相关的代码部分:
首先,我传递给OAuth2 :: AccessToken的post方法的参数(我需要超过10个rep来发布另一个链接,但这里是dochttp://rdoc.info/github/intridea/oauth2/ebe4be038ec14b349682/OAuth2/AccessToken#post -instance_method)(您可以单击请求方法以查看如何处理参数)
base_url = request.protocol + request.host_with_port channel_id = (0...50).map { ('a'..'z').to_a[rand(26)] }.join body_post = {:id => channel_id,:type => 'web_hook',:address => base_url + "/googledrive/webhook"} headers = {'Content-Type' => 'application/json'} response = makeApiCall(token,"google_drive","/changes/watch","post",{},body_post,headers)
所有这一切都建立了我的请求与我的相应的请求正文和呼叫的标题
以下是makeApiCall的相关部分(在令牌token.post处是请求的位置,以及它在哪里中断)
params = {"oauth_consumer_key" => ENV[key], "access_token" => token.token}.merge(params) #body = Rack::Utils.build_query(body) opts = { :params => params, :body => body, :headers => headers } if(method=="get") response = token.get(base + path,:opts => opts) elsif(method=="post") debugger response = token.post(base + path,:opts => opts) end
这是我的第一篇或第二篇文章,如果我搞砸了,请原谅我。
好吧,经过这么长时间的挣扎,我想出了为什么它不起作用。 我忘了这样做:
JSON.generate(body_post)
所以我的身体实际上是应用/ jsonforms。
另外,这一行:
response = token.post(base + path,:opts => opts)
应该是这样的:
response = token.post(base + path,opts)
只是因为我没有分配opts键,而是我正在传递的变量。 傻我。