【问题标题】:Downloading files with Microsoft Graph using bash (curl)使用 bash (curl) 通过 Microsoft Graph 下载文件
【发布时间】:2017-10-08 01:47:24
【问题描述】:

我尝试通过 Microsoft Graph 从 OneDrive 下载几个文件。

我非常接近实现我的目标。目前我已经管理了令牌系统(特别是通过Jay Lee detailed answer),并解决了我在 Microsoft Graph 中存在的不同端点之间造成的混淆(谢谢Marc LaFleur - MSFT)。

现在我真正致力于调用允许下载我想要的文件的 API。我是这样处理的:

1- 正如我在Microsoft Graph Documentation 中看到的,正常语法如下:

curl -w %{time_total} https://graph.microsoft.com/v1.0/me/drive/items/01M...WU/content -H "Authorization: Bearer $access_token"

2- 但是,这给了我一个 302 请求,我无法在 bash 中处理。所以我寻找另一种解决方案,我发现这个Microsoft article 解释说:

“要在 JavaScript 应用程序中从 OneDrive 下载文件您不能使用 /content API,因为它会以 302 重定向响应。当需要 CORS 预检时,明确禁止 302 重定向,例如与提供 Authorization 标头时一样。

相反,您的应用需要选择 @microsoft.graph.downloadUrl 属性,该属性返回 /content 重定向到的相同 URL。然后可以使用 XMLHttpRequest 直接请求此 URL。因为这些 URL 是经过预验证的,所以无需 CORS 预检请求即可检索它们。”

它谈到了 Javascript,但我认为它可以应用于我的案例。

3-所以我尝试了这种方法并写道:

curl "https://graph.microsoft.com/v1.0/me/drive/items/01MB...WU?select=id,@microsoft.graph.downloadUrl" -H "Authorization: Bearer $access_token"

它给了我通常允许我最终下载文件的 URL,但是当我执行它时,我得到以下响应:

代码:

curl "https://graph.microsoft.com/v1.0/$metadata#users('e967dd4d-680e-4a06-9bf7-468875e1a04c')/drive/items/$entity" -H "Authorization: Bearer $access_token"(这正是我之前的请求得到的)

回应:

有什么帮助吗?为什么这是一个错误的请求,因为我已经完全按照我从 graph.microsoft.com 请求中获得的内容提出了请求?

【问题讨论】:

    标签: bash curl onedrive microsoft-graph-api


    【解决方案1】:

    https://graph.microsoft.com/v1.0/$metadata#users('e967dd4d-680e-4a06-9bf7-468875e1a04c')/drive/items/$entity@odata.context 注释,这不是您所追求的。您需要从 @microsoft.graph.downloadUrl 注释中提取 URL 并使用它来获取文件内容。您所访问的网址应在其中提及download.aspx

    【讨论】:

    • 感谢您的回答。再精确一点:当我执行curl "https://graph.microsoft.com/v1.0/me/drive/items/01MB...WU?select=id,@microsoft.graph.downloadUrl" -H "Authorization: Bearer $access_token" 时,我只有@odata.context@odata.etag、id 和1\""(我不知道最后一个注释代表什么)。我没有@content.downloadUrl。所以,我直接放了不带select参数的url,我得到了,但是为什么select参数没有检索到正确的属性呢?
    • 几件事。 1) 我应该说@microsoft.graph.downloadUrl 因为@content.downloadUrl 仅在直接调用OneDrive API 时才相关。 2) 你发现了一个错误!我们没有在 select 语句中正确处理 @microsoft.graph.downloadUrl,所以我会修复它。
    • 知道了。修复后让我们保持最新状态。
    • 这是我们将用来跟踪它的问题github.com/OneDrive/onedrive-api-docs/issues/606
    • 实际上,作为一种解决方法,您可以select=@content.downloadUrl 它会返回@microsoft.graph.downloadUrl
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多