如何用Python Requests创建Google Drive共享文件夹?遇400错误求助
问题解决:Drive文件夹共享返回400 Invalid Request错误
核心问题
你的代码向Drive API发送请求时,没有以正确的JSON格式传递payload。虽然headers里指定了Content-Type: application/json,但使用data=payload会让requests将字典以application/x-www-form-urlencoded格式发送,不符合API的JSON格式要求。普通文件可能因API兼容逻辑能正常工作,但文件夹的权限校验更严格,直接返回了400错误。
修复代码
修改requests.post的参数,把data=payload替换为json=payload,让requests自动将字典序列化为JSON字符串并适配格式要求:
def GetLinkToFile(file_id, file2): url = f'https://www.googleapis.com/drive/v3/files/{file_id}/permissions?supportsAllDrives=true' headers = {'Authorization': f'Bearer {access_token}'} payload = {'type': 'anyone', 'role': 'reader'} # 使用json参数传递载荷,自动处理JSON序列化与Content-Type res = requests.post(url, json=payload, headers=headers) # 建议添加响应检查,方便排查后续问题 if res.status_code != 200: print("权限设置失败:", res.json()) link = file2['alternateLink'] pyperclip.copy(link)
额外优化建议
- 移除手动设置的
Content-Type:使用json参数时,requests会自动添加Content-Type: application/json,无需手动指定,避免格式冲突。 - 补充错误处理:添加状态码检查,打印错误响应内容,能快速定位后续可能出现的权限或参数问题。
- 确认
alternateLink字段有效性:Drive v3 API默认不返回alternateLink,如果file2是通过API获取的,需要在请求时指定fields=alternateLink,...来包含该字段,否则可能触发KeyError。
内容的提问来源于stack exchange,提问作者gey ser
相关产品推荐
相关产品推荐

