我正在使用angular js $ http服务向yahoo finance rest api发出ajax get请求但是我得到http状态代码405作为响应。
下面是完整的堆栈跟踪。
index.html#/tab/stock:1 XMLHttpRequest cannot load http://finance.yahoo.com/webservice/v1/symbols/SUZLON.NS/quote?format=json&view=detail.
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin'
header is present on the requested resource.
Origin 'http://localhost:8080' is therefore not allowed access.
The response had HTTP status code 405.
下面是我进行ajax调用的代码。
var config = {
headers : {
'Access-Control-Allow-Origin' : '*',
'Accept' : 'application/json;odata=verbose',
"HOST" : "finance.yahoo.com"
}
};
var promise = null;
promise = $http.get('http://finance.yahoo.com/webservice/v1/symbols/SUZLON.NS/quote?format=json&view=detail',config);
return promise;
我能够对google finance api进行ajax调用,但雅虎财务api失败了。
我是否需要设置任何标头我的配置对象? 或者在Yahoo Rest API方面有什么不同,它返回Http 405?
google api call下面的代码工作正常,没有设置任何标头。
getNseQuote : function(nseScriptCode) {
console.log("Inside nseScriptCode : " + nseScriptCode);
var promise = null;
promise = $http.get('http://www.google.com/finance/info?q=NSE:' + encodeURIComponent(nseScriptCode));
return promise;
}
答案 0 :(得分:0)
您可以使用this extension for chrome link。它允许您执行跨域请求。在您将API与应用程序集成之前测试API URL,看看它是否使用第三方工具(如Postman)最适合测试API调用..
关于你的错误 " 对预检请求的响应未通过访问控制检查:否' Access-Control-Allow-Origin' 标头出现在请求的资源上。"这意味着服务器没有配置为处理飞行前请求。飞行请求是由浏览器在特殊情况下请求,例如当您从不同的域请求数据时(当您执行GET /以外的请求时) POST和在您的请求中使用任何自定义标头等)仅出于安全目的(我想)..
所以,在你的情况下,你应该使用代理服务器,你可以使用任何可用的开源软件包...在我的情况下我使用node-http-proxy。浏览器调用代理服务器和代理服务器提取来自实际服务器的数据并将其返回给浏览器..通过一点点的修补很容易实现......