在WSL中通过Python调用Google Drive API时遭遇404错误
解决Google Drive共享盘API访问404错误的排查方案
优先排查服务账号权限问题(最常见原因)
404错误大概率不是防火墙导致,而是服务账号未获得共享盘访问权限:
- 打开目标共享云端硬盘,进入「管理成员」页面,将服务账号的邮箱(可从
credenciais.json的client_email字段获取)添加为成员,至少分配「查看者」及以上权限,保存后等待5-10分钟让权限生效。
验证API启用状态
- 登录Google Cloud控制台,确认已启用Google Drive API(不是其他关联API)。若未启用,搜索并启用后重新测试。
代码参数与异常排查
优化代码以获取详细错误信息
添加异常捕获,打印完整错误详情,便于定位问题:
from googleapiclient.discovery import build from google.oauth2 import service_account from googleapiclient.errors import HttpError shared_drive_id = 'xxxxxcensuredxxxxx' credentials_path = '/home/flora_sauer/credenciais.json' credentials = service_account.Credentials.from_service_account_file( credentials_path, scopes=['https://www.googleapis.com/auth/drive'] ) drive_service = build('drive', 'v3', credentials=credentials) try: results = drive_service.files().list( corpora='drive', driveId=shared_drive_id, includeItemsFromAllDrives=True, supportsAllDrives=True, pageSize=100, fields="files(name)" # 仅请求需要的字段,减少数据传输 ).execute() files = results.get('files', []) if not files: print("共享盘中未找到文件") else: for file in files: print(file['name']) except HttpError as error: print(f"错误代码:{error.resp.status}") print(f"错误内容:{error.content.decode('utf-8')}")
参数检查
- 确认
driveId完全匹配共享盘ID,避免输入错误或多余字符。 corpora='drive'必须与driveId同时使用,参数搭配正确。
验证WSL网络与防火墙问题
若上述排查均无效,再验证网络连通性:
- 在WSL终端执行
ping googleapis.com,确认能正常解析并连通。 - 用API密钥直接调用测试(仅适用于公开共享盘):
curl "https://www.googleapis.com/drive/v3/files?corpora=drive&driveId=你的共享盘ID&includeItemsFromAllDrives=true&supportsAllDrives=true&key=你的API密钥"
- 若返回正常数据,说明WSL网络无问题;若仍返回404,回到权限配置环节排查。
- 若curl请求超时或被拒绝,再检查Windows防火墙是否阻止WSL出站连接:打开Windows Defender防火墙,确保允许WSL相关的网络请求(可临时关闭防火墙测试,确认后再配置规则)。
其他身份验证方式的注意事项
- API密钥:仅能访问公开共享的文件/文件夹,私有共享盘无法使用此方式,出现404属于正常情况。
- OAuth客户端ID:需确保授权的Gmail账号本身拥有共享盘访问权限,且使用「桌面应用」类型的客户端ID(避免Web应用的跳转限制)。
内容的提问来源于stack exchange,提问作者FloraSauerbronn
相关产品推荐
相关产品推荐

