谷歌表格 API 请求上的 CORS 授权

Posted

技术标签:

【中文标题】谷歌表格 API 请求上的 CORS 授权【英文标题】:CORS authorization on google sheets API requests 【发布时间】:2015-04-17 06:59:10 【问题描述】:

我正在尝试通过表格 API 检索基于单元格的提要来从谷歌电子表格中读取数据。 电子表格是私有的,所以我使用 oauth 2.0 来授权我的请求。

通过https://spreadsheets.google.com/feeds/spreadsheets 检索有关我的驱动器帐户的基本信息工作正常,但是当我尝试直接通过我的电子表格访问数据时 XMLHttp GET 请求到https://spreadsheets.google.com/feeds/cells

我收到“请求的资源上不存在‘Access-Control-Allow-Origin’标头”错误。

我已经通过

设置了正确的授权令牌
 xhr.setRequestHeader('Authorization', 'Bearer ' + token);

并试图通过

“激活” CORS
 xhr.setRequestHeader('Access-Control-Allow-Credentials', 'true');

无济于事。

关于如何访问此资源的任何提示?

谢谢!

【问题讨论】:

【参考方案1】:

就在今天解决了同样的问题。而且我不需要启用/激活 CORS,因为我已经读到某些防火墙会删除标头以确保安全。 http://promincproductions.com/blog/server-proxy-for-cross-site-scripting-cors/

在你的 js 代码的全局部分,添加一个函数 ...

window.googleDocCallback = function ()  return true; ;

然后,在您的 AJAX(假设为 GET?)请求中的 URL 中,如果您没有 URI 参数,请附加 ?callback=googleDocCallback

如果你有其他参数, 追加&callback=googleDocCallback

更多信息请见:https://jvaneyck.wordpress.com/2014/01/07/cross-domain-requests-in-javascript/

【讨论】:

终于!我试图这样做几个小时,这是我的 GS 脚本中的一个错误,它通过执行任何它所做的任何事情来阻止响应,从而在出现错误时发送回不同类型的响应。但它有效!【参考方案2】:

Google Sheets API 存在一个已知错误,即不支持对 POST 请求进行 CORS。您能否确认您实际上是在发出 GET 请求而不是 POST/PUT/DELETE?

【讨论】:

另外,OPTIONS 请求。设置标头的 GET 请求会自动更改为 OPTIONS 请求。我花了一段时间才弄清楚这个。【参考方案3】:

您需要发送一个 GET 请求。确保没有发送任何标头(甚至没有内容类型标头)。

【讨论】:

这很有帮助。谢谢。

以上是关于谷歌表格 API 请求上的 CORS 授权的主要内容,如果未能解决你的问题,请参考以下文章

过滤谷歌电子表格api请求中的数据

谷歌表格 API 上的“更新”方法

如何在我的谷歌脚本中允许 CORS 请求?

CORS 不工作

G-Cloud SDK 应用程序:如何授权 sdk 应用程序访问谷歌表格

CORS preflight OPTIONS 请求从 Windows Authenticated web api 返回 401(未授权)