Python 错误google API:";帖子正文和基本授权标题中的凭据不匹配;

Python 错误google API:";帖子正文和基本授权标题中的凭据不匹配;,python,google-api,google-drive-api,google-oauth,google-api-python-client,Python,Google Api,Google Drive Api,Google Oauth,Google Api Python Client,我已经实现了一个python脚本,可以连接到GoogleDrive并下载我的文件。对于授权,我遵循了谷歌网站上的快速入门指南和代码示例 问题是:当我第一次授予授权时,会生成一个token.pickle,但经过一段时间(不多,可能不到1小时),我会收到以下错误: google.auth.exceptions.RefreshError:('invalid_request:post body和基本授权标头中的凭据不匹配','{\n“error”:“invalid_request”,\n“error_d

我已经实现了一个python脚本,可以连接到GoogleDrive并下载我的文件。对于授权,我遵循了谷歌网站上的快速入门指南和代码示例

问题是:当我第一次授予授权时,会生成一个token.pickle,但经过一段时间(不多,可能不到1小时),我会收到以下错误:

google.auth.exceptions.RefreshError:('invalid_request:post body和基本授权标头中的凭据不匹配','{\n“error”:“invalid_request”,\n“error_description”:“post body和基本授权标头中的凭据不匹配”\n}

如果我删除token.pickle并再次从浏览器中执行授权,所有操作都会再次生效,但显然我需要一个有效时间更长的令牌

授权代码如下:

SCOPES=['https://www.googleapis.com/auth/drive']
def main():
“”“显示驱动器v3 API的基本用法。
打印用户有权访问的前10个文件的名称和ID。
"""
信誉=无
#文件token.pickle存储用户的访问和刷新令牌,并且
#在第一次完成授权流时自动创建
#时间。
如果os.path.exists('token.pickle'):
以open('token.pickle','rb')作为令牌:
creds=pickle.load(令牌)
#如果没有可用的(有效)凭据,请让用户登录。
如果没有信用或信用无效:
如果creds和creds.expired和creds.refresh\u令牌:
creds.refresh(请求())
其他:
flow=InstalledAppFlow.from_client_secrets_文件(
“credentials.json”,作用域)
creds=flow.运行本地服务器(端口=0)
#保存下一次运行的凭据
以open('token.pickle','wb')作为令牌:
pickle.dump(信用卡、代币)
服务=构建('drive','v3',凭据=凭据)

谢谢

如果您之前已经授权过该应用程序一次,则可能会发生这种情况。oauth2服务器一次只能生成一个刷新令牌,如果您通过流请求另一个访问令牌,它将像您只请求访问令牌一样运行

尝试直接通过谷歌撤销访问权限,然后再次尝试授权该应用程序。然后,您应该拥有用户的刷新令牌。这将允许脚本在需要时请求新的访问令牌


如果这不起作用,您可以尝试在提示符为“同意”的情况下构建flow对象,看看是否可以修复它。

如果您之前已经对应用程序进行过一次授权,则可能会发生这种情况。oauth2服务器一次只能生成一个刷新令牌,如果您通过流请求另一个访问令牌,它将像您只请求访问令牌一样运行

尝试直接通过谷歌撤销访问权限,然后再次尝试授权该应用程序。然后,您应该拥有用户的刷新令牌。这将允许脚本在需要时请求新的访问令牌


如果这不起作用,您可以尝试在提示符为“同意”的情况下构造flow对象,看看是否能解决问题。

谢谢您的回答。我试过你的解决办法,但似乎不管用。。我也尝试过我的覆盆子,我发现,使用相同的文件,它可以工作,而我的opensuse pc也不能工作。这对我来说也失败了。你确定你在google开发者控制台上创建了其他类型的凭据吗?是 啊我已经经历过六次了。仍然失败。有趣的是,我在调试器中跟踪了一些事情,它最终发出的HTTP请求根本没有基本的授权头。我尝试在一个匹配的基本身份验证头中进行黑客攻击(使用调试器),但仍然出现错误。真令人沮丧。谢谢你的回答。我试过你的解决办法,但似乎不管用。。我也尝试过我的覆盆子,我发现,使用相同的文件,它可以工作,而我的opensuse pc也不能工作。这对我来说也失败了。你确定你在google开发者控制台上创建了其他类型的凭据吗?是 啊我已经经历过六次了。仍然失败。有趣的是,我在调试器中跟踪了一些事情,它最终发出的HTTP请求根本没有基本的授权头。我尝试在一个匹配的基本身份验证头中进行黑客攻击(使用调试器),但仍然出现错误。这真令人沮丧。