小编Chr*_* Q.的帖子

Google通讯录API:未经授权的401未知授权标头

我仔细阅读了Google Contacts API文档,但我无法获得正确的PUT请求(即更新).我正在使用带有OAuth gem的Ruby on Rails 3.2(v0.4.5).我使用Omniauth获取令牌,范围定义为" https://www.google.com/m8/feeds "

让我来证明:

ruby-1.9.2-p290 :001 > @access_token.get("https://www.google.com/m8/feeds/contacts/default/full/c1f86b48b52548c", {"GData-Version" => "3.0"})
=> #<Net::HTTPOK 200 OK readbody=true>
Run Code Online (Sandbox Code Playgroud)

如您所见,GET请求运行良好,因此我的OAuth访问令牌应该没问题.DELETE请求也可以工作:

ruby-1.9.2-p290 :002 > @access_token.delete('https://www.google.com/m8/feeds/contacts/default/full/c1f86b48b52548c', { 'GData-Version' => '3.0', 'If-Match' => '"RH46fTVSLyt7I2A9Wx9VFkgMQAU."' })
 => #<Net::HTTPOK 200 OK readbody=true>
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.在这里,我按照Google的文档[1]中的说明在请求标题中提供了联系人条目的Etag.所以它不应该造成任何麻烦.

根据OAuth gem文档[2],PUT请求的语法应如下所示:

- (Object) put(path, body = '', headers = {})
Run Code Online (Sandbox Code Playgroud)

以及文档中的示例:

@token.put('/people/123', @person.to_xml, { 'Accept' => 'application/xml', 'Content-Type' => 'application/xml' })
Run Code Online (Sandbox Code Playgroud)

据我所知,我应该发送一个简单的XML字符串作为PUT请求的主体.所以让我们先获取一些示例数据:

ruby-1.9.2-p290 :003 > xmldata = @access_token.get("https://www.google.com/m8/feeds/contacts/default/full/5f74bf0d5c621a", {"GData-Version" => "3.0"}).body

=> "<?xml version='1.0' encoding='UTF-8'?>
      <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gContact='http://schemas.google.com/contact/2008' …
Run Code Online (Sandbox Code Playgroud)

xml oauth google-api google-contacts-api ruby-on-rails-3

5
推荐指数
1
解决办法
1637
查看次数