如何从刷新令牌中获取访问令牌?刷新令牌会过期吗?

时间:2021-06-08 19:32:53

标签: python google-api python-requests google-drive-api

我正在尝试创建一个 python 脚本,它将一个(带有访问令牌和文件的 .csv)作为输入并将该文件上传到多个谷歌驱动器,其访问令牌在该 csv 中 但一段时间后访问令牌过期,我必须再次获取它们......刚刚看到有一个叫做刷新的东西,它刷新了访问令牌

<块引用>

是否可以从python脚本中做到这一点,请解释一下。

<块引用>

刷新令牌会过期吗?

import json
import requests
import pandas as pd
headers = {}
para = {
    "name": "update",
}
files = {
    'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'),
    'file': open("./update.txt", "rb")
}
tokens = pd.read_csv('tokens.csv')
for i in tokens.token:
    headers={"Authorization": i}
    r = requests.post(
        "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
        headers=headers,
        files=files
    )
    print(r.text)

1 个答案:

答案 0 :(得分:0)

为了能够获得 a new access_token programmatically using a refresh_token,您必须在 redirecting the user to Google's OAuth 2.0 server 时将 access_type 设置为 offline

如果你这样做了,如果你对 access_token 执行以下 POST 请求,你可以获得一个新的 https://oauth2.googleapis.com/token

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=your_client_id&
client_secret=your_client_secret&
refresh_token=refresh_token&
grant_type=refresh_token

相应的响应类似于:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "https://www.googleapis.com/auth/drive",
  "token_type": "Bearer"
}

注意:

您可以在我下面提供的参考资料中找到多种语言的代码片段,包括 Python,但考虑到您没有使用 Python 库,我认为我提供的 HTTP/REST 片段在您的情况下可能更有用。

参考: