2017-03-19 10 views
0

Dropbox Business 계정에 팀 구성원의 폴더를 나열하려고합니다.400 클라이언트 오류 : 잘못된 URL 요청 : https://api.dropboxapi.com/2/files/list_folder

https://api.dropboxapi.com/2/files/list_folderDropbox-API-Select-User 헤더를 추가해야하지만 작동하지 않는 것 같습니다. post() 함수에서 json= 인수가 그래서 정확해야 application/json에 콘텐츠 형식을 설정하는 것을

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()) 

참고 :

이 지금까지 내 코드입니다. 내가 팀 구성원 ID (bdmid:) 대신 계정 ID를 사용하여 시도했지만 같은 오류를 가지고있다

requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api.dropboxapi.com/2/files/list_folder 

:

은 위의 코드는 예외를 발생시킵니다.

무엇이 잘못 되었습니까?

미리 도움을 청하십시오.

차이점이 있으면 Python 3.6을 사용하고 있습니다.

+0

'POST'가 맞습니까? 나에게 대신 * GET을 사용하는 * list * 유형의 호출에 더 적합한 것처럼 보일 수 있습니까? 하지만 Dropbox API를 사용한 적이 없으므로 기본 요구 사항을 알 수 없습니다. – idjaw

+0

올바른 경로를 제공 한 다음 다시 시도하십시오 ...또한 하나 이상의 헤더를 추가하십시오. Content-Type : application/json " –

+0

이 모든 작업을 수행 할 Python 클라이언트가 없습니까? – idjaw

답변

4

먼저, 기본 네트워킹/형식 지정 작업을 수행하기 때문에 공식 Dropbox API v2 Python SDK을 사용하는 것이 좋습니다. 즉, 원한다면 확실히 HTTPS endpoints을 직접 사용할 수 있습니다.

어쨌든, 이와 같은 문제를 처리 할 때보다 유용한 오류 메시지가 포함되어 있으므로 응답 본문을 인쇄하십시오. 이 같은 수행 할 수

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

또 다른 문제는 API v2와 함께, 루트 경로는 점이다

이 코드이 경우 print(r.text)

, 즉 오류 메시지를 산출 가정은 "", 빈 문자열로 지정해야합니다 :

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를 제공해야하기 때문입니다. 이에 대한 Dropbox API v2 Python SDK을 사용하려는 경우

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()) 

편집이 추가로이 같은 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("")) 
+0

우수 답변, 감사합니다. 1) 멤버 ID를 사용하고 2) 루트 디렉토리에 대한 표준 슬래시 "/"대신 비표준 빈 문자열 ""을 사용했습니다. 그래도 팀원으로 Dropbox SDK 기능을 호출하는 방법을 볼 수 없었습니다. Dropbox SDK는 Dropbox Business가 아닌 개별 사용자 용으로 작성된 것 같습니다. – blokeley

+0

SDK에 대한 샘플로 내 대답을 편집했습니다. 희망이 도움이! – Greg

+0

우수. 이제 SDK의 요점을 알 수 있습니다. Dropbox Business SDK 예제가있는 문서가 어딘가에 있으면 좋겠다. readthedocs에있는 docstring의 한 페이지 덤프는 그다지 깨닫지 못합니다. – blokeley