400客户端错误:错误的URL请求:https://api.dropboxapi.com/2/files/list_folder

blo*_*ley 2 python json dropbox dropbox-api python-requests

我正在尝试在我们的Dropbox Business帐户中列出团队成员的文件夹。

https://api.dropboxapi.com/2/files/list_folder要求我们添加Dropbox-API-Select-User标题,但它似乎不起作用。

到目前为止,这是我的代码:

import requests

url = "https://api.dropboxapi.com/2/files/list_folder"

headers = {
    "Authorization": "Bearer MY_TOKEN",
    "Dropbox-API-Select-User": "dbid:ACCOUNT_ID"
    }

data = {
    "path": "/",
}

r = requests.post(url, headers=headers, json=data)
r.raise_for_status()
print(r.json())
Run Code Online (Sandbox Code Playgroud)

请注意,json=函数中的post()参数将内容类型设置为,application/json因此应该正确。

上面的代码引发了一个异常:

requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.dropboxapi.com/2/files/list_folder
Run Code Online (Sandbox Code Playgroud)

我尝试使用团队成员ID(bdmid:)而不是帐户ID,但遇到相同的错误。

你知道怎么了吗

在此先感谢您的帮助。

我正在使用Python 3.6,如果有什么区别。

Gre*_*reg 5

首先,我应该注意,我们建议您使用官方的Dropbox API v2 Python SDK,因为它可以为您处理很多基础网络/格式化工作。也就是说,您当然可以根据需要直接使用基础HTTPS终结点

无论如何,在处理此类问题时,请确保打印出响应本身的正文,因为它会包含更有用的错误消息。您可以这样做:

print(r.text)

在这种情况下,使用以下代码,将产生错误消息:

Error in call to API function "files/list_folder": Invalid select user id format

另一个问题是,使用API​​ v2时,应该将根路径指定为空字符串""

Error in call to API function "files/list_folder": request body: path: Specify the root folder as an empty string rather than as "/".

这是因为在使用像这样的成员文件访问功能时,应该提供成员ID,而不是帐户ID。

因此,解决这些问题后,工作代码如下所示:

import requests

url = "https://api.dropboxapi.com/2/files/list_folder"

headers = {
    "Authorization": "Bearer MY_TOKEN",
    "Dropbox-API-Select-User": "dbmid:MEMBER_ID"
    }

data = {
    "path": "",
}

r = requests.post(url, headers=headers, json=data)
print(r.text)
r.raise_for_status()
print(r.json())
Run Code Online (Sandbox Code Playgroud)

编辑为添加,如果您要为此使用Dropbox API v2 Python SDK,则应使用DropboxTeam.as_user以下代码:

import dropbox

dbx_team = dropbox.DropboxTeam("MY_TOKEN")
dbx_user = dbx_team.as_user("dbmid:MEMBER_ID")

print(dbx_user.files_list_folder(""))
Run Code Online (Sandbox Code Playgroud)