使用cURL将文件上载到Google Drive-access_令牌过期问题

使用cURL将文件上载到Google Drive-access_令牌过期问题,curl,oauth,google-api,google-drive-api,google-oauth,Curl,Oauth,Google Api,Google Drive Api,Google Oauth,我的目标是创建一个包含cURL请求的脚本,该脚本可以随时运行,将指定文件上传到我们的googledrive帐户,而无需任何手动输入 当我使用新创建的“访问令牌”时,我可以使用cURL将文件上传到谷歌硬盘 但是,当我稍后运行同一个cURL命令上载另一个文件时,会出现无效凭据错误 从阅读来看,这是因为“访问令牌”过期了。为了生成一个新的“访问令牌”,我需要生成一个新的“用户代码”,并在https://www.google.com/device“ 因为我需要在没有任何手动输入的情况下运行脚本,所以我不

我的目标是创建一个包含cURL请求的脚本,该脚本可以随时运行,将指定文件上传到我们的googledrive帐户,而无需任何手动输入

当我使用新创建的“访问令牌”时,我可以使用cURL将文件上传到谷歌硬盘

但是,当我稍后运行同一个cURL命令上载另一个文件时,会出现无效凭据错误

从阅读来看,这是因为“访问令牌”过期了。为了生成一个新的“访问令牌”,我需要生成一个新的“用户代码”,并在https://www.google.com/device“

因为我需要在没有任何手动输入的情况下运行脚本,所以我不希望每次需要上传文件时都生成“用户代码”,因为这是一个手动步骤

我是否应该在cURL请求中使用生成的“refresh_token”以便在任何给定时间上载文件


任何帮助都将不胜感激。

为了访问google api,您需要有一个访问令牌。正如您所知,访问令牌在一小时后过期,那么您需要请求一个新的访问令牌。当您第一次授权用户时,wises的做法是请求离线访问。这将向您返回一个refeshtoken。当你的代码运行时,我建议使用刷新令牌来请求一个新的访问令牌,然后你将始终使用一个有效的访问令牌运行一个小时

下面是从我的一个GIST上撕下来的

请求访问。 请记住向您的作用域添加“脱机”访问权限

# Client id from Google Developer console
# Client Secret from Google Developer console
# Scope this is a space separated list of the scopes of access you are requesting.

# Authorization link.  Place this in a browser and copy the code that is returned after you accept the scopes.
https://accounts.google.com/o/oauth2/auth?client_id=[Application Client Id]&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=[Scopes]&response_type=code

# Exchange Authorization code for an access token and a refresh token.

curl \
--request POST \
--data "code=[Authentcation code from authorization link]&client_id=[Application Client Id]&client_secret=[Application Client Secret]&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code" \
https://accounts.google.com/o/oauth2/token
将刷新令牌交换为新的访问令牌。 更新:


另请参见

例如,在驱动器API快速启动的示例脚本中,该API与刷新令牌检索的访问令牌一起使用。这样,就不需要每次都使用浏览器检索授权代码。我认为服务帐户也可以使用。但在这种情况下,需要实现使用服务帐户检索访问令牌的脚本。在这种情况下,如果您已经拥有刷新令牌或者可以检索它,我建议使用刷新令牌。如果这不是你期望的方向,我道歉。这是否回答了你的问题?我可以使用cURL进行连接,没有问题。这更像是令牌过期的问题。谢谢你的回复。
# Exchange a refresh token for a new access token.
curl \
--request POST \
--data 'client_id=[Application Client Id]&client_secret=[Application Client Secret]&refresh_token=[Refresh token granted by second step]&grant_type=refresh_token' \
https://accounts.google.com/o/oauth2/token