谷歌表格 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 授权的主要内容,如果未能解决你的问题,请参考以下文章
G-Cloud SDK 应用程序:如何授权 sdk 应用程序访问谷歌表格
CORS preflight OPTIONS 请求从 Windows Authenticated web api 返回 401(未授权)