2014-09-26 69 views
-2

我想从这个网站 https://bitcoinindex.es/api/v0.1/coinbase/usd/btc/lastCORS不适用于Angular?

GET信息使用$ http服务

寻找所有在互联网上以后这里是我的CoffeeScript代码

angular.module('blackmoonApp') 
    .controller 'PricingCtrl', ($scope, $http) -> 
    $http.defaults.useXDomain = true 
    $http.get("https://bitcoinindex.es/api/v0.1/coinbase/usd/btc/last", 
     headers: 
     "Access-Control-Allow-Origin": "*" 
    ).success (JSON) -> 
     console.log JSON 

结果是

"XMLHttpRequest cannot load https://www.bitstamp.net/api/ticker/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access." 

我不确定网站是否阻止了我(哪个wou没有道理,因为它是一个API),或者如果AngularJS不能使用CORS。

回答

2

Access-Control-Allow-Origin响应标题。

此:

headers: 
    "Access-Control-Allow-Origin": "*" 

...设置一个请求报头。

您需要将它设置为https://www.bitstamp.net/api/ticker/,而不是在您的JavaScript中。

如果任何JavaScript可以授予自己访问任何服务器的权限,它将击败对象。


我不知道如果该网站阻止我(这是没有意义的,因为它是一个API)

阻塞是默认行为。必须授予显式权限才能允许来自其他来源的JavaScript访问。否则,任何拥有bitstamp帐户的人都可能通过访问使用该API的网站(因为它将是他们的浏览器和他们的cookie,提出请求)而使他们的比特币被盗。

+1

这是一个公共API,虽然文档在这里https:// bitcoinindex。es/api – grasshopper 2014-09-26 20:39:03

1

从代码:

$http.get("https://www.bitstamp.net/api/ticker/", 
    headers: 
    "Access-Control-Allow-Origin": "*" 
) 

我们看到,您尝试发送Access-Control-Allow-Origin头中的GET要求

CORS不能这样工作; Access-Control-Allow-Origin标头必须存在于由服务器发送的响应中(当然,这样的标头必须包括发送该请求的页面完全相同的域)。

从我的测试(不可能的,但你的结果可能会有所不同):

  • https://bitcoinindex.es/api/v0.1/coinbase/usd/btc/last只允许自己的域(响应了Access-Control-Allow-Origin:https://bitcoinindex.es),这是一种毫无意义的CORS请求;和
  • https://www.bitstamp.net/api/ticker/根本没有Access-Control-Allow-Origin标头。
+0

那么为什么bitstamp不能工作呢? – grasshopper 2014-09-26 20:40:41

+0

我不明白你的意思。你能改说吗? - 看,你可以在'https:// bitcoinindex.es /'上向一个服务发出一个Ajax请求,要么将请求的HTML页面部署在'https:// bitcoinindex.es /'或者,如果它被部署在其他地方(比如http://www.grasshopper.com),那么'https:// bitcoinindex.es /'必须在其响应中包括'Access-Control-Allow-Origin:http://www.grasshopper.com'。由于它目前不包括该标题中的任何内容,因此浏览器正在向您提供该错误。 – acdcjunior 2014-09-26 20:47:03

+0

所以它只是巧合我尝试的每个API都没有标题?这一个适用于我使用Curl w/php,但与$ http相同的错误。 http://data.bter.com/api/1/marketlist – grasshopper 2014-09-26 20:49:34