Запросы получили ошибку, но работают в Graph Explorer

Я получаю сообщение об ошибке 404 при попытке изменить приложение python-sample-console-app для изучения MS Graph API. Однако HTTP-запросы отлично работают в MS Graph Explorer.

Я думаю, что я сделал одинаковые разрешения на доступ к файлам для MS Graph Explorer и моего приложения. Разрешения включают в себя Files.ReadWrite.All, Sites.ReadWrite.All, openid, People.Read.

import config

def api_endpoint(url):
    if urllib.parse.urlparse(url).scheme in ['http', 'https']:
       return url # url is already complete
    return urllib.parse.urljoin(f'{config.RESOURCE}/{config.API_VERSION}/',
                                url.lstrip('/'))

def device_flow_session(client_id, auto=False):
    ctx            = AuthenticationContext(config.AUTHORITY_URL, api_version=config.API_VERSION)
    device_code    = ctx.acquire_user_code(config.RESOURCE, client_id)

   # display user instructions
    if auto:
        pyperclip.copy(device_code['user_code']) # copy user code to clipboard
        webbrowser.open(device_code['verification_url']) # open browser
        print(f'The code {device_code["user_code"]} has been copied to your clipboard, '
            f'and your web browser is opening {device_code["verification_url"]}. '
            'Paste the code to sign in.')
    else:
        print(device_code['message'])

    token_response = ctx.acquire_token_with_device_code(config.RESOURCE,
                                                       device_code,
                                                       client_id)
    if not token_response.get('accessToken', None):
        return None

    session = requests.Session()
    session.headers.update({'Authorization': f'Bearer {token_response["accessToken"]}',
                           'SdkVersion': 'sample-python-adal',
                           'x-client-SKU': 'sample-python-adal'})
    return session

def get_request (session, endpoint):
    print ('\n------GET--------\n')
    the_response      = session.get(api_endpoint(endpoint), stream=True)
    print (str(the_response.json()))
    status_code       = the_response.status_code
    print (f'<Response [{status_code}]>')

def mytest ():
    GRAPH_SESSION = device_flow_session(config.CLIENT_ID)
    if not GRAPH_SESSION:
       return

    endpoint = 'https://graph.microsoft.com/v1.0/sites/xxxx:/xxxx'
    get_request (GRAPH_SESSION, endpoint)

    endpoint = 'https://graph.microsoft.com/v1.0/sites/xxxx/drives/<drive_id_1>/root:/<existing_path>/'
    get_request (GRAPH_SESSION, endpoint)

    endpoint = 'https://graph.microsoft.com/v1.0/drives/<drive_id_1>/items/<item_id_1>/'
    get_request (GRAPH_SESSION, endpoint)

if __name__ == '__main__':
    mytest ()

Вывод из моего скрипта Python:

------GET--------
Response [200]

------GET--------
{'error': {'code': 'itemNotFound', 'message': 'The resource could not be found.', 'innerError': {'request-id': '2636b686-b1db-4e2f-8f03-0e750e3de008', 'date': '2019-08-24T06:18:10'}}}
<Response [404]>

------GET--------
{'error': {'code': 'itemNotFound', 'message': 'The resource could not be found.', 'innerError': {'request-id': '91bc2e7d-4366-4ffc-bed8-386c7a9861dd', 'date': '2019-08-24T06:18:12'}}}
<Response [404]>

Ответы из Graph Explorer на последние 2 запроса:

Success - Status Code 200

Изменить: Кажется, что мой код не может найти какие-либо элементы в drive_id_1. Я знаю это, потому что я попробовал этот запрос:

GET https://graph.microsoft.com/v1.0/drives/<drive_id_1>/root/children

поле "значение" в ответе пустое

{'@odata.context': "https://graph.microsoft.com/v1.0/$metadata#drives('<drive_id_1>')/root/children", 'value': []}

Но с Graph Explorer, поле правильно, как я ожидал

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives('<drive_id_1>')/root/children",
    "value": [
        {
            "createdDateTime": "2018-12-20T18:04:06Z",
            "eTag": "\"{xxxx},1\"",
            "id": "xxxx",
            "lastModifiedDateTime": "2018-12-20T18:04:06Z",
            "name": "xxxx",
            "webUrl": "xxxx",
            "cTag": "\"c:{xxxxx},0\"",
            "size": 545056,
            "createdBy": {
                "user": {
                    "email": "xxxx",
                    "id": "xxxx",
                    "displayName": "xxxx"
                }
            },
            ....
        },
        ....
    ]
}

Почему мой код не может делать то же самое, что и Graph Explorer? У меня есть достаточные разрешения?

0 ответов

Другие вопросы по тегам