2016-08-25 5 views
3

Ich versuche, den Inhalt eines onedrive-Elements über die Microsoft API herunterzuladen. Unabhängig von der Methode, die ich verwende, erhalte ich 404 Antworten. Hier ist eine Reproduktion des Problems in Python/Anfragen404 Herunterladen von OneDrive-Inhalten aus 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) 

gibt die folgend:

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: 
[] 

Welche, dass unmittelbar nach dem Link führt zu einem 404 zu sagen ist, wenn angenommen wird, die zum Download Dateibytes. Ich habe dies in Java, Python, Bash/Curl und im Browser reproduziert. Kann jemand helfen, aufzuzeigen, was ich falsch mache, oder ist das ein Problem mit der Microsoft Graph API?

EDIT:

Ich kann auch die gleiche 404 die/Antrieb/Artikel/{item-id}/content Endpunkt beschrieben here mit reproduzieren. Die Anforderung an diesen Endpunkt führt zu einer 302-Umleitung (wie in der Dokumentation beschrieben), die, wenn sie ausgeführt wird, das gleiche 404-Verhalten wie oben beschrieben zur Folge hat.

EDIT2:

Hier sind alle Anfrage-IDs ich in den Antwort-Header finden konnten, die für das Debuggen von der Microsoft-Seite sah nützlich.

Für die 200 Anfrage auf das Objekt Objekt: 'Anfrage-ID': 'Adfa3492-4825-439d-8e59-022f32e78244', 'Client-Anfrage-ID': 'Adfa3492-4825-439d-8e59-022f32e78244'

Für die 404 Anfrage auf die Download-uRL: 'request-id': '33e09e9d-b0c2-2000-133c-304585c15000', 'SPRequestGuid': '33e09e9d-b0c2-2000-133c-304585c15000',

Darüber hinaus enthält das tatsächliche HTML, das von 404 zurückgegeben wird, Korrelations-ID: a8e09e9d-a0bb-2000-133b-ef6fc8ac7015

+1

Können Sie die "Anfrage-ID" aus den Antwortheadern bereitstellen? – Brad

+0

Es ist e04e9d9d-9070-2000-133b-ef376013cbdc – User1234567890

+0

Sorry, nur um zu verdeutlichen: Die obige Anfrage-ID ist für die 404-Antwort. Lassen Sie mich wissen, wenn Sie die Anfrage-ID für das erste Get auf dem Objekt haben möchten. – User1234567890

Antwort

3

Dateidownload wird derzeit nur mit delegierten Berechtigungen (z. B. File.Read-Bereich) wie dokumentiert here unterstützt. Ihre Anfrage wurde mit Anwendung Berechtigungen Files.Read.All und Files.ReadWrite.All, die wir nach und nach hinzufügen Unterstützung gemacht, aber sie sind noch nicht voll funktionsfähig und sind nicht aufgeführt here.

+0

Ist das immer noch wahr? –

+0

Ist das noch ein offenes Thema? Gibt es eine ETA, wann dies geändert wird? – jdave

0

Können Sie überprüfen, ob item_id tatsächlich die ID eines Elements ist? Wenn Sie mit der Sammlung arbeiten, die von GET /v1.0/users//drive/items/ zurückgegeben wurde, gibt die Sammlung ein Array mit Ordner- und Elementmetadaten zurück. Wenn Sie Ihre Anfrage für einen Ordner ausführen, erhalten Sie den 404 wie beschrieben. Nur so kann ich Ihr Problem repro-duzieren. Wenn dies nicht der Fall ist, geben Sie bitte die Anfrage/Antwort-Trace an, damit wir die Fehlerdetails sehen können.

+0

Hallo Michael, danke für die Antwort. Ich bin sicher, dass item_id die ID einer Datei ist, da der anfängliche Aufruf ein JSON-Objekt zurückgibt, das die Eigenschaft "file" enthält. Entsprechend der Dokumentation bedeutet dies, dass das Objekt eine Datei ist. Ich habe "EDIT2" hinzugefügt, das alle Trace-Informationen zur Anfrageantwort enthält, die ich finden konnte. Bitte lassen Sie mich wissen, ob es noch etwas anderes geben sollte. – User1234567890

+0

@ User1234567890 Ich kann die RequestIds nicht verwenden, um Ihre Anrufe nachzuschlagen. Können Sie uns den ersten Anruf zeigen? Der, wo du die Item_ID bekommst? Bitte zeigen Sie die Anfrage und sanktioniert (und möglicherweise abgekürzt) Antwort Körper. –

+0

Hallo Michael, danke für das Follow-up. Bitte schauen Sie sich noch einmal den Code in meiner ursprünglichen Frage an, speziell beim ersten requests.get-Aufruf, bei dem ich den Artikel mit der item_id anfordere. Die Antwort auf diesen Aufruf ist eine 200 mit einem vollständigen Körper, der das Element beschreibt und angibt, dass es sich um eine gültige Element-ID handelt. Sie können diese Antwort im zweiten Codeblock meiner Frage anzeigen. Das Problem, das ich habe, ist, dass der downloadUrl, der mit dieser Gegenstandsantwort zur Verfügung gestellt wird, zu einem 404 aufgelöst wird, anstatt die Bytes der Akte herunterzuladen. Der 404 tritt aufgrund einer falschen Element-ID nicht auf. – User1234567890

Verwandte Themen