使用角度 $http 调用 Quandl API 的 CORS 问题

Posted

技术标签:

【中文标题】使用角度 $http 调用 Quandl API 的 CORS 问题【英文标题】:CORS issue with calling Quandl API with angular $http 【发布时间】:2016-09-17 07:15:41 【问题描述】:

我正在尝试从 Quandl (https://www.quandl.com/data/YAHOO/MSFT.json) 网站获取数据。它与所有浏览器和其他 REST 客户端(如 Postman)完美配合。

我的角度 $http 调用看起来很简单,我已经尝试了很多有或没有标题的组合。

$http(
        url: 'https://www.quandl.com/data/YAHOO/MSFT.json',
        method: "GET",
        headers: 
            "X-Content-Type-Options": "nosniff",
            "X-Frame-Options": "SAMEORIGIN",
            "X-Rack-CORS": "preflight-hit; no-origin"
        
    )
    .then(res => 
        console.log(res);
    );

得到一个标准错误

XMLHttpRequest 无法加载 https://www.quandl.com/data/YAHOO/MSFT.json。对预检的响应 请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:2992” 使用权。响应的 HTTP 状态代码为 405。

但是,供应商似乎支持 CORS http://help.quandl.com/article/280-does-the-quandl-api-support-cross-origin-resource-sharing-cors

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

Quandl 在通过 API 请求数据时支持 CORS。您尝试使用的 URL 用于数据集的网页。要进行 API 调用,您所要做的就是找到该数据集的 Quandl 代码并将其传递给 API。

您可以在该页面的右上角找到 Quandl 代码(本例中为 YAHOO/MSFT)。因此,您的请求的适当 API 调用将是 https://www.quandl.com/api/v3/datasets/YAHOO/MSFT.json。

您可以在此处查看使用 Quandl API 的完整文档:https://www.quandl.com/docs/api。

【讨论】:

【参考方案2】:

您是否检查过您使用的网址是否正确? Quandl 为其 API 提出了不同的 URL。见Quandl - How do I download a dataset using the API

您的网址应为:https://www.quandl.com/api/v3/datasets/YAHOO/MSFT-MSFT-Microsoft-Corporation.json

【讨论】:

以上是关于使用角度 $http 调用 Quandl API 的 CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 RXJS 继续以角度触发 http 调用,直到满足条件

webpack服务器中的rest API调用(来自角度)返回401

如何使用标头、有效负载和正文制作 httpclient 获取请求?角度 API

雅虎财经 API 的替代品? [关闭]

服务器在渲染之前不会等到 http 调用完成 - 角度 4 服务器端渲染

预检响应在角度发布请求上具有无效的 HTTP 状态代码 403