400 Client Error: Bad Request for url: https://api.dropboxapi.com/2/files/list_folder
400 Client Error: Bad Request for url: https://api.dropboxapi.com/2/files/list_folder
我正在尝试列出团队成员在我们的 Dropbox Business 帐户中的文件夹。
https://api.dropboxapi.com/2/files/list_folder 要求我们添加 Dropbox-API-Select-User
header,但它似乎不起作用。
到目前为止,这是我的代码:
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())
请注意,post()
函数中的 json=
参数将内容类型设置为 application/json
,因此应该是正确的。
上面的代码引发了一个异常:
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.dropboxapi.com/2/files/list_folder
我尝试使用团队成员 ID (bdmid:
) 而不是帐户 ID,但出现了同样的错误。
你知道哪里出了问题吗?
在此先感谢您的帮助。
如果有任何不同,我正在使用 Python 3.6。
首先,我要指出,如果您愿意,我们确实建议您直接像这样使用官方 Dropbox API v2 Python SDK as it takes care of a lot of the underlying networking/formatting work for you. That said, you can certainly use the underlying HTTPS endpoints。
无论如何,在处理此类问题时,一定要打印出响应的正文本身,因为它会包含更有用的错误消息。您可以这样做:
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 "/".
那是因为像这样使用member file access功能时,您应该提供会员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())
编辑添加,如果你想像这样使用Dropbox API v2 Python SDK for this, you would use 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(""))
我正在尝试列出团队成员在我们的 Dropbox Business 帐户中的文件夹。
https://api.dropboxapi.com/2/files/list_folder 要求我们添加 Dropbox-API-Select-User
header,但它似乎不起作用。
到目前为止,这是我的代码:
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())
请注意,post()
函数中的 json=
参数将内容类型设置为 application/json
,因此应该是正确的。
上面的代码引发了一个异常:
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.dropboxapi.com/2/files/list_folder
我尝试使用团队成员 ID (bdmid:
) 而不是帐户 ID,但出现了同样的错误。
你知道哪里出了问题吗?
在此先感谢您的帮助。
如果有任何不同,我正在使用 Python 3.6。
首先,我要指出,如果您愿意,我们确实建议您直接像这样使用官方 Dropbox API v2 Python SDK as it takes care of a lot of the underlying networking/formatting work for you. That said, you can certainly use the underlying HTTPS endpoints。
无论如何,在处理此类问题时,一定要打印出响应的正文本身,因为它会包含更有用的错误消息。您可以这样做:
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 "/".
那是因为像这样使用member file access功能时,您应该提供会员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())
编辑添加,如果你想像这样使用Dropbox API v2 Python SDK for this, you would use 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(""))