我正在尝试创建一个使用OAuth访问用户Google日历的应用。我有适当的代码来获取所有正确的令牌,并将它们保存到一些首选项中。顺便说一句,我使用教程here来完成这一切。我已成功更改范围并请求URL,以便我获得所需的令牌。当我真正尝试使用令牌时,问题出现了。而不是日历信息,我得到一些HTML,上面写着“未知的授权标题错误401”。我正在使用的请求网址是:
https://www.google.com/calendar/feeds/default/allcalendars/full
,范围是:
http://www.google.com/calendar/feeds/
我尝试用我的电子邮件地址(也就是我用于OAuth的地址)替换'default'无济于事。我使用的是错误的网址吗?如果没有,还有什么可能导致此错误?我一直在寻找几天找到使用OAuth访问日历的人,但我发现的一切都是让人放弃,因为它太难或不起作用。
编辑:
我相信我的标题是正确的,这是一个例子:
OAuth oauth_token="************-********-**********-****",
oauth_consumer_key="anonymous",
oauth_version="1.0",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1303161387",
oauth_nonce="*******************",
oauth_signature="*******************"
这是直接从我的应用程序中提取的,从我能找到的内容看起来对我来说,但我仍然收到上述错误(未知授权标题错误401)。
答案 0 :(得分:2)
授权标题必须是“授权:OAuth oauth_nonce =”deadbeefdeadbeef“oauth_version =”1.0“....
见http://code.google.com/apis/accounts/docs/OAuth_ref.html#RequestToken。据推测,您可以在查询字符串或POST正文中使用授权参数,但我没有尝试过。
<小时/> 如下面的评论中所述,Google现在至少使用日历源,添加'gsessionid ='查询字符串并重定向;所以重定向处理程序必须创建一个新的随机数和时间戳,并创建一个新的签名,确保以正确的字典顺序(在任何oauth_变量之前)将gsessionid添加到基本签名字符串。