【问题标题】:Google docs API: can't download a file, downloading documents worksGoogle docs API:无法下载文件,下载文件有效
【发布时间】:2012-06-13 11:51:50
【问题描述】:

我正在尝试使用 google 文档列表 API 和 OAuth 1.0 来从 google docs 下载 pdf 文件的 http 请求。我没有为 oauth 或 google docs 使用任何外部 api。

根据文档,我获得了 pdf 的下载 URL,该 URL 在放置在浏览器中时可以正常工作。

根据文档,我应该发送如下所示的请求:

GET https://doc-04-20-docs.googleusercontent.com/docs/secure/m7an0emtau/WJm12345/YzI2Y2ExYWVm?h=16655626&e=download&gd=true  

但是,下载 URL 的参数有一些有趣的地方,它看起来像这样:

https://doc-00-00-docs.googleusercontent.com/docs/securesc/5ud8e...tMzQ?h=15287211447292764666&amp\;e=download&amp\;gd=true    

(在网址中'&amp\;'实际上没有'\',但我将其放在帖子中以避免将其转义为'&')。

那么这里的情况是什么?我有 3 个参数 h,e,gd 还是有一个参数 h 的值为 15287211447292764666&ae=download&gd=true,或者我有以下 3 个参数值对:​​h = 15287211447292764666amp;e = downloadamp;gd = true(我认为是这样吗,这似乎是一个错误)?

为了形成正确的 http 请求,我需要确切地知道参数名称和值是什么,但是我的下载 URL 令人困惑。此外,如果参数名称是 h、amp;e 和 amp;gd,那么包含这些参数的请求是否对获取文件内容有效(如果不是,这似乎是一个错误)。

我下载和上传文档(msword 文档)没有问题,我下载文件的范围是正确的。

我尝试了很多不同的请求。当我单独处理 3 个参数 (h,e,gd) 时,我得到Unauthorized 401。如果我假设我只有一个参数 - h 值为15287211447292764666&ae=download&gd=true 我得到500 Internal Server Error(google api 状态:'API 中发生了意外错误。','如果问题仍然存在,请在论坛中发帖。 ')。

如果我根本不输入任何参数或输入 3 个参数 -h、amp;e、amp;gd,我会得到 302 Found。我尝试按照重定向发送更多请求,但我仍然无法获得实际的 pdf 内容。我还在 OAuth Playground 中进行了实验,但它似乎没有像预期的那样工作。在 OAuth 中使用下载 URL 发送 get 请求会以 302 Found 响应,而不是响应 PDF 内容。

这里发生了什么?如何在响应中获取 pdf 内容?请帮忙。

【问题讨论】:

  • 您是如何收到下载网址的?它可能是 HTML 实体编码的。
  • 我一直在使用 OAuth Playground 和一个用于发送请求的在线工具 - hurl 发送和浏览响应,他们都在响应正文中使用 &amp 而不是 & 进行响应。但是,当我使用另一个在线工具 - api kitchen 时,URL 是正确的 - 没有放大器,所以你必须在这里,非常感谢:) 但是我已经尝试发送请求以获取带有参数 e、gd、h 和 I 的文件我得到 401 未经授权
  • 再想一想,我仍然不确定 http 实体编码,我假设 OAuth Playground 和 hurl 编码了实际响应而 api kitchen 没有,但是在浏览器中放置带有 &amps 的 url 有效- 它会打开 pdf,如果我使用来自 api kitchen 的 url - 使用 & 而不是 &amps 我在浏览器中什么也得不到,所以也许实体编码在 google 端并且 api kitchen 进行了解码,我在这里很困惑
  • 别介意前面的评论 - 如果我在登录到 gmail 时将下载 URL 放入浏览器(不需要授权)并且我使用 3 个参数 h、e、gd 什么都不会发生,如果我不这样做'不要将所有 3 个参数都放在 URL 中,pdf 内容会显示在浏览器中,所以显然拥有 3 个参数并没有什么特别之处 - h、&amph、&ampgd

标签: oauth google-docs google-docs-api google-drive-api


【解决方案1】:

我用 oAuth2 试验过同样的问题(错误 401)。

通过在请求标头而不是 URL 中插入 oAuth2 令牌来解决。

我已将 URL 中的 &access_token=<token> 替换为 setRequestHeader("Authorization", "Bearer <token>" )

【讨论】:

  • 好的,事情是这样的——我在 OAuth Playground 中进行了实验,得到了下载 URL 链接,删除了所有 &amps 内容并发送请求以下载带有请求 URL 中的参数的文件,响应是 401 未授权(像之前一样)。当我勾选将参数放在标题中的选项时,我不再获得 401 未经授权,实际上我什么也没得到 - 空响应。将 oauth 令牌放入 header 的方式是 OAuth 2.0 方式,在 Oauth 1.0 中有所不同。
  • Outh Playground 没有响应 PDF 内容,但是当我自己形成请求时,将所有 OAuth 参数放在标头中,并将 e、h、gd 参数放在 URL 中,我终于收到了内容的文件,所以谢谢你,你的提示帮助:)
猜你喜欢
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多