2016-08-25 9 views
3

Я пытаюсь загрузить содержимое элемента onedrive через microsoft api. Однако, независимо от метода, который я использую, я получаю 404 ответа. Вот воспроизведение проблемы в питоне/запрашивает404 Загрузка содержимого OneDrive из Microsoft Graph

import requests 
import json 

root_url = "https://graph.microsoft.com" 
base_path = "/v1.0/<tenant_id>/users/<principal_name>/drive/" 

token = "ALONGTOKEN" 

headers = {"Authorization": "Bearer %s" % token} 

r = requests.get(root_url + base_path + "/root/children", headers=headers) 
listing = json.loads(r.text) 
target = listing["value"][0] 
print("Target node:") 
print(json.dumps(target)) 
print("Target node id:") 
print(target["id"]) 

r = requests.get(root_url + base_path + "items/" + target["id"], headers=headers) 
print("Target metadata:") 
print(r.text) 

resp = json.loads(r.text) 
download_url = resp["@microsoft.graph.downloadUrl"] 
print("Target download url:") 
print(download_url) 

r = requests.get(download_url, headers=headers) 
print("Download response code:") 
print(r.status_code) 
print("Download response headers:") 
print(r.headers) 
print("Download response cookies:") 
print(r.cookies) 
print("Download response redirect history:") 
print(r.history) 

выводит следующее:

Target node: 
{"parentReference": {"driveId": "drive_id", "path": "/drive/root:", "id": "parent_id"}, "cTag": "\"c:{tag},1\"", "lastModifiedDateTime": "2016-08-24T17:32:45Z", "name": "birds.png", "createdDateTime": "2016-08-24T17:32:45Z", "image": {}, "webUrl": "https://org-my.sharepoint.com/personal/principal_name/Documents/birds.png", "lastModifiedBy": {"user": {"displayName": "User Name", "id": "user_id"}}, "eTag": "\"{etag},1\"", "createdBy": {"user": {"displayName": "User Name", "id": "user_id"}}, "@microsoft.graph.downloadUrl": "https://org-my.sharepoint.com/personal/principal_name/_layouts/15/download.aspx?guestaccesstoken=access_token&docid=did&expiration=2016-09-01T17%3a12%3a14.000Z&userid=uid&authurl=True&NeverAuth=True", "file": {"hashes": {}}, "id": "01L4SXJGJ2LR2PGPKJMVGZPHIADCAYJEFE", "size": 34038} 

Target node id: 
01L4SXJGJ2LR2PGPKJMVGZPHIADCAYJEFE 

Target metadata: 
{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users('principal_name')/drive/items/$entity","@microsoft.graph.downloadUrl":"https://org-my.sharepoint.com/personal/principal_name/_layouts/15/download.aspx?guestaccesstoken=accesstoken&docid=docid&expiration=2016-09-01T17%3a12%3a15.000Z&userid=uid&authurl=True&NeverAuth=True","createdBy":{"user":{"id":"user_id","displayName":"User Name"}},"createdDateTime":"2016-08-24T17:32:45Z","eTag":"\"{etag},1\"","id":"01L4SXJGJ2LR2PGPKJMVGZPHIADCAYJEFE","lastModifiedBy":{"user":{"id":"user_id","displayName":"User Name"}},"lastModifiedDateTime":"2016-08-24T17:32:45Z","name":"birds.png","webUrl":"https://org-my.sharepoint.com/personal/principal_name/Documents/birds.png","cTag":"\"c:{ctag},1\"","file":{"hashes":{}},"image":{},"parentReference":{"driveId":"drive_id","id":"parent_id","path":"/drive/root:"},"size":34038} 

Target download url: 
https://org-my.sharepoint.com/personal/principal_name/_layouts/15/download.aspx?guestaccesstoken=accesstoken&docid=docid&expiration=2016-09-01T17%3a12%3a15.000Z&userid=uid&authurl=True&NeverAuth=True 

Download response code: 
404 

Download response headers: 
{'Content-Length': '13702', 'SPIisLatency': '4', 'X-Content-Type-Options': 'nosniff', 'X-AspNet-Version': '4.0.30319', 'request-id': '288b9f9d-c04a-2000-133b-ebab2f6f332b', 'Strict-Transport-Security': 'max-age=31536000', 'MicrosoftSharePointTeamServices': '16.0.0.5625', 'X-Powered-By': 'ASP.NET', 'SPRequestGuid': '288b9f9d-c04a-2000-133b-ebab2f6f332b', 'Server': 'Microsoft-IIS/8.5', 'X-MS-InvokeApp': '1; RequireReadOnly', 'X-SharePointHealthScore': '0', 'SPRequestDuration': '297', 'SharePointError': '0', 'Cache-Control': 'private', 'Date': 'Thu, 01 Sep 2016 16:12:14 GMT', 'P3P': 'CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI"', 'Content-Type': 'text/html; charset=utf-8'} 

Download response cookies: 
<RequestsCookieJar[]> 

Download response redirect history: 
[] 

Который должен сказать, что сразу после результатов линии в 404, хотя предполагается загрузить файлов. Я воспроизвел это в java, python, bash/curl и в браузере. Может кто-нибудь помочь указать, что я делаю неправильно, или это проблема с графиком microi api?

РЕДАКТИРОВАТЬ:

Я также может воспроизвести то же самое с использованием 404/диск/товаров/{идентификатор записи}/содержание конечных точек описано here. Запрос к этой конечной точке приводит к перенаправлению 302 (как описано в документации), которое, если следовать, приводит к такому же поведению 404, как описано выше.

EDIT2:

Здесь весь запрос Идентификаторы я смог найти в заголовках ответа, которые казались полезными для отладки со стороны Microsoft.

Для запроса 200 объекта предмета: 'request-id': 'adfa3492-4825-439d-8e59-022f32e78244', 'client-request-id': 'adfa3492-4825-439d-8e59-022f32e78244'

Для 404 запроса на URL загрузки: 'запрос-ид': '33e09e9d-b0c2-2000-133c-304585c15000', 'SPRequestGuid': '33e09e9d-b0c2-2000-133c-304585c15000',

Кроме того, фактический HTML, возвращенный из 404, включает в себя идентификатор корреляции: a8e09e9d-a0bb-2000-133b-ef6fc8ac7015

+1

Можете ли вы предоставить «запрос-идентификатор» из заголовков ответов? – Brad

+0

Его e04e9d9d-9070-2000-133b-ef376013cbdc – User1234567890

+0

Извините, просто для уточнения: указанный выше идентификатор запроса предназначен для ответа 404. Сообщите мне, хотите ли вы идентификатор запроса для первоначального доступа к объекту. – User1234567890

ответ

3

Загрузка файла в настоящее время поддерживается только делегированных разрешений (например, область File.Read) как задокументировано here. Ваш запрос был сделан с помощью приложения . Разрешения Файлы. Читайте все и файлы. ReadWrite.All, к которым мы постепенно добавляем поддержку, но они еще не полностью функциональны и не перечислены here.

+0

Это правда? –

+0

Это еще проблема? Есть ли ETA, когда это будет изменено? – jdave

0

Вы можете проверить, что item_id на самом деле является идентификатором элемента? Если вы работаете с коллекцией, возвращаемой GET /v1.0/users//drive/items/, коллекция вернет массив метаданных папки и элемента. Если вы попробуете свой запрос к папке, вы получите 404, как вы описали. Это единственный способ воспроизвести вашу проблему. Если это не проблема, укажите трассировку запроса/ответа, чтобы мы могли увидеть детали ошибки.

+0

Привет, Майкл, спасибо за ответ. Я уверен, что item_id - это идентификатор файла, потому что первоначальный вызов возвращает объект json, который включает свойство «file». Согласно документации, это означает, что объект является файлом. Я добавил «EDIT2», который содержит всю информацию отслеживания ответов на запрос, которую я мог найти, сообщите мне, если есть что-то еще, что я должен включать. – User1234567890

+0

@ User1234567890 Я не могу использовать RequestIds для поиска ваших звонков. Можете ли вы показать нам начальный вызов? Тот, где вы получаете item_id? Пожалуйста, покажите запрос и обработайте (и, возможно, сокращенно) тело ответа. –

+0

Привет, Майкл, спасибо за продолжение. Пожалуйста, снова просмотрите код в моем исходном вопросе, особенно при первом вызове request.get, в котором я запрашиваю элемент, используя item_id. Ответ на этот вызов - 200 с полным текстом, описывающим элемент, что указывает на то, что это действительный идентификатор элемента. Вы можете просмотреть этот ответ во втором блоке кода моего вопроса. Проблема, с которой я столкнулась, заключается в том, что файл downloadUrl, предоставленный с ответом этого элемента, разрешает 404, а не загружает байты файла. 404 не происходит из-за неправильного идентификатора элемента. – User1234567890

Смежные вопросы