python - 如何从刷新令牌中获取访问令牌?刷新令牌会过期吗?
问题描述
我正在尝试创建一个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)
解决方案
为了能够使用 以编程方式获取新access_token
refresh_token
的,您必须在将用户重定向到 Google 的 OAuth 2.0 服务器时设置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 片段在您的情况下可能更有用。
参考:
推荐阅读
- sql - SQL-SSRS 报告
- django - Django Oracle OCA-24450
- python - for循环中的Python“else”和“if not”语句
- intellij-idea - IntelliJ IDEA 无法编译 groovy 测试
- doctrine-orm - 持久化数据后刷新时出现致命错误
- python - django crud 服务器总是返回 404
- reactjs - 使用 refs 在父 AJAX 之后设置子输入值
- java - 如何改善 SQL 连接
- angular - Angular 属性指令 - prod 构建错误,预期 1 个参数但得到 0
- elasticsearch - Windows 无法在本地启动弹性搜索服务