Python 使用gdata对托管域的google数据API进行OAuth身份验证失败

Python 使用gdata对托管域的google数据API进行OAuth身份验证失败,python,django,google-docs-api,gdata-python-client,Python,Django,Google Docs Api,Gdata Python Client,我正在创建一个django应用程序,为用户创建日历和google文档文件夹,并使用API插入事件和添加文档。几个月前,它的效果还不错;现在我正在对我的代码进行重大重构,在测试上述组件时,我发现它们不再工作了!当我尝试创建文件夹或日历时,API会给出以下响应: RequestError: {'status': 401, 'body': '<HTML>\n<HEAD>\n<TITLE>Unknown authorization header</TITLE&g

我正在创建一个django应用程序,为用户创建日历和google文档文件夹,并使用API插入事件和添加文档。几个月前,它的效果还不错;现在我正在对我的代码进行重大重构,在测试上述组件时,我发现它们不再工作了!当我尝试创建文件夹或日历时,API会给出以下响应:

RequestError: {'status': 401, 'body': '<HTML>\n<HEAD>\n<TITLE>Unknown authorization header</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Unknown authorization header</H1>\n<H2>Error 401</H2>\n</BODY>\n</HTML>\n', 'reason': 'Unknown authorization header'}

例外来自最后一行,API中有什么变化吗,还是只有我?(我打赌只有我一个人,但我看不到它,因为它在几个月前就开始工作了)

json响应中列出了原因:
'reason':'Unknown authorization header'

一个可能的原因是机器的本地时间。确保本地计算机上的时间正确,因为oauth使用当前unix时间戳来签名和验证请求

下面是记录的bug列表。第一个似乎很适合你的情况:

希望这有帮助:)

from gdata.auth import OAuthSignatureMethod, OAuthToken, OAuthInputParams
from gdata.calendar.service import CalendarService
from django.conf import settings
client_instance = CalendarService()
client_instance.SetOAuthInputParameters(OAuthSignatureMethod.HMAC_SHA1,
                                settings.OAUTH_CONSUMER_KEY,
                                consumer_secret=settings.OAUTH_CONSUMER_SECRET)
user_tokens = UserToken.objects.get(user=user)
if not user_tokens.oauth_access_token_value or not user_tokens.oauth_valid_token:
    raise Exception('The user has not allowed us to access his services')      
oauth_token=OAuthToken(key=user_tokens.oauth_access_token_value,    secret=user_tokens.oauth_access_token_secret)
oauth_token.oauth_input_params = OAuthInputParams(OAuthSignatureMethod.HMAC_SHA1,
                         settings.OAUTH_CONSUMER_KEY,
                        consumer_secret=settings.OAUTH_CONSUMER_SECRET)
client_instance.SetOAuthToken(oauth_token)
new_folder = docs_service.CreateFolder("some folder")