【问题标题】:How can I fix a parse error when making a post request with python?使用 python 发出 post 请求时如何修复解析错误?
【发布时间】:2020-07-04 04:16:23
【问题描述】:
request = {
    "parents": ["1zaxxxxxxxxxxxxxxxZo"],
     "name": selected_name
    }
headers = {
     "Authorization": "Bearer "+creds.token,
     "Accept": "application/json",
     "Content-Type": "application/json"
     }
data = {
     "fileId": file_id,
     "request": request,
     "fields": "files(id)",
     "supportsAllDrives": True,
     "ignoreDefaultVisibility": True
     }
response = requests.post("https://www.googleapis.com/drive/v3/files/"+file_id+"/copy", data=data, headers=headers)
response = response.json()

我正在尝试请求将 file_id 复制到我的请求中列出的父文件夹。我对谷歌驱动器的 api 和发布请求都是新手,我不明白我做错了什么。我已经在这个问题上工作了几个小时,我收到了一个错误响应代码 400,解析错误。从我收集到的信息来看,这意味着我的请求格式不正确。我一直在尝试不同的东西很长一段时间,我无法弄清楚如何正确地做到这一点。如果有人可以帮助我,将不胜感激,或者指出我在哪里可以自行解决此问题。我一直在阅读文档,也许我咬掉的东西比我能咀嚼的还多。谢谢。

【问题讨论】:

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


    【解决方案1】:

    我相信你的目标和情况如下。

    • 您想使用 Drive API v3 和 python 的 requests 复制 Google Drive 上的文件。
    • 您已经拥有使用 Drive API 复制文件的访问令牌。

    为了实现你的目标,我想提出以下修改。

    修改点:

    • 请将fieldssupportsAllDrivesignoreDefaultVisibility的值设置为查询参数。

    • 请将fieldsfiles(id)修改为id

    • 请求正文如下。

        data = {
            "parents": ["1zaxxxxxxxxxxxxxxxZo"],
            "name": selected_name
        }
      
    • 请将data=data修改为data=json.dumps(data)

    当以上几点反映到你的脚本中时,它变成如下。

    修改后的脚本:

    import json
    import requests
    
    file_id = "###"  # Please set the source file ID.
    selected_name = "###"  # Please set the filename.
    
    headers = {
        "Authorization": "Bearer "+creds.token,
        "Accept": "application/json",
        "Content-Type": "application/json"
    }
    data = {
        "parents": ["1zaxxxxxxxxxxxxxxxZo"],  # Please set the folder ID.
        "name": selected_name
    }
    params = {
        "fields": "id",
        "supportsAllDrives": True,
        "ignoreDefaultVisibility": True
    }
    response = requests.post("https://www.googleapis.com/drive/v3/files/"+file_id+"/copy", data=json.dumps(data), params=params, headers=headers)
    response = response.json()
    print(response)
    

    结果:

    运行上述脚本时,会显示以下值。

    {'id': '###'}
    

    注意:

    • 此修改后的脚本假设您的访问令牌creds.token 可用于使用 Drive API 复制文件。请注意这一点。

    参考:

    【讨论】:

    • @Blue fish 谢谢回复。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多