我正在使用OAuth2 gem ( rails)实现google。我没有使用客户端库,因为我也在集成其他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,但我不这么认为,因为调试器在建立连接后就会得到响应。嗯,现在,我什么都不知道,所以任何帮助都是值得感谢的。这家伙和我有完全相同的错误代码,也有同样的结论。
总之,相关的代码部分:
首先,我传递给OAuth2::AccessToken的post方法的参数(我需要10个以上的rep来发布另一个链接,但这里是文档方法)(您可以单击request方法来查看如何处理params )
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这是我的第一个或第二个帖子,所以如果我搞砸了,请原谅我。
发布于 2014-08-23 17:29:20
好吧,在挣扎了这么久之后,我明白了为什么它不起作用了。我忘了这么做:
JSON.generate(body_post)所以我的身体实际上是在申请表/json表格中。
此外,这一行:
response = token.post(base + path,:opts => opts)应该是这样:
response = token.post(base + path,opts)仅仅因为我没有分配opts键,而是分配要传递的变量。我真傻。
https://stackoverflow.com/questions/25414767
复制相似问题