xml – Google通讯录API:未经授权的401未知授权标头
发布时间:2020-12-16 23:27:51 所属栏目:百科 来源:网络整理
导读:我仔细阅读了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.g
我仔细阅读了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> 如您所见,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> 到现在为止还挺好.在这里,我按照Google的文档[1]中的说明在请求标题中提供了联系人条目的Etag.所以它不应该造成任何麻烦. 根据OAuth gem文档[2],PUT请求的语法应如下所示: - (Object) put(path,body = '',headers = {}) 以及文档中的示例: @token.put('/people/123',@person.to_xml,{ 'Accept' => 'application/xml','Content-Type' => 'application/xml' }) 据我所知,我应该发送一个简单的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' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='"R3w4fzVSLit7I2A9WhRaGEQCQgc."'> <id>http://www.google.com/m8/feeds/contacts/my.email%40address.com/base/5f74bf0d5c621a</id> <updated>2012-02-22T08:15:36.237Z</updated> <app:edited xmlns:app='http://www.w3.org/2007/app'>2012-02-22T08:15:36.237Z</app:edited> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/> <title>Joe Average</title> <link rel='http://schemas.google.com/contacts/2008/rel#photo' type='image/*' href='https://www.google.com/m8/feeds/photos/media/my.email%40address.com/5f74bf0d5c621a?v=3.0'/> <link rel='self' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/my.email%40address.com/full/5f74bf0d5c621a?v=3.0'/> <link rel='edit' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/my.email%40address.com/full/5f74bf0d5c621a?v=3.0'/> <gd:name> <gd:fullName>Joe Average</gd:fullName> <gd:givenName>Joe</gd:givenName> <gd:familyName>Average</gd:familyName> </gd:name> <gd:email rel='http://schemas.google.com/g/2005#other' address='joe.average@isp.net' primary='true'/> </entry>" …并尝试将其更新回Google: ruby-1.9.2-p290 :004 > @access_token.put("https://www.google.com/m8/feeds/contacts/default/full/5f74bf0d5c621a",xmldata,{"GData-Version" => "3.0",'If-Match' => '"R3w4fzVSLit7I2A9WhRaGEQCQgc."'}) => #<Net::HTTPUnauthorized 401 Unknown authorization header readbody=true> 所以这不起作用.让我们尝试删除一点XML,这样看起来就像文档[1]: xmldata = "<entry gd:etag='"R3w4fzVSLit7I2A9WhRaGEQCQgc."'> <id>http://www.google.com/m8/feeds/contacts/my.email%40address.com/base/5f74bf0d5c621a</id> <updated>2012-02-22T08:15:36.237Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/> <link rel='http://schemas.google.com/contacts/2008/rel#photo' type='image/*' href='https://www.google.com/m8/feeds/photos/media/my.email%40address.com/5f74bf0d5c621a?v=3.0'/> <link rel='self' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/my.email%40address.com/full/5f74bf0d5c621a?v=3.0'/> <link rel='edit' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/my.email%40address.com/full/5f74bf0d5c621a?v=3.0'/> <gd:name> <gd:fullName>Joe Average</gd:fullName> <gd:givenName>Joe</gd:givenName> <gd:familyName>Average</gd:familyName> </gd:name> <gd:email rel='http://schemas.google.com/g/2005#other' address='joe.average@isp.net' primary='true'/> </entry>" 但没有运气,与以前完全一样的错误. 这就是我现在完全陷入困境的地方.我非常感谢任何正确方向的提示. [1] https://developers.google.com/google-apps/contacts/v3/#updating_contacts [2] http://rubydoc.info/gems/oauth/0.4.5/OAuth/AccessToken 解决方法
尝试在PUT请求中将Content-Type标头设置为“application / atom xml”.我遇到了类似的问题而这样做有所帮助.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |