我正在使用OAuth2 gem(轨上的红宝石)实现google drive 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" } }
这不是很有用。可能不是Google。可能是OAuth2,但我不这么认为,因为调试器在建立连接后即可获得响应。好吧,在这一点上,我一无所知,因此可以提供任何帮助。有这个家伙,他的错误代码和我完全一样,而且结论也一样。
无论如何,相关代码部分:
首先,我传递给OAuth2 :: AccessToken的post方法的参数(我需要10个以上的代表才能发布另一个链接,但这是dochttp://rdoc.info/github/intridea/oauth2/ebe4be038ec14b349682/OAuth2/AccessToken#post -instance_method)(您可以单击request方法以查看如何处理参数)
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的相关部分(在令牌行中。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)
这样我的身体实际上处于application / json形式。
另外,这一行:
response = token.post(base + path,:opts => opts)
应该是这样的:
response = token.post(base + path,opts)
仅仅是因为我没有分配opts键,而是我传递的变量。傻我
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句