curl和ajax之间的区别

时间:2015-09-29 10:58:25

标签: javascript ajax curl

我正在尝试与反应应用中的API(http://labs.skanetrafiken.se/api.asp)进行通信。

但是我一直被阻止

var url = 'http://www.labs.skanetrafiken.se/v2.2/neareststation.asp?x=55.720504899999995&y=13.1927948'
$.ajax({
  type: "GET",
  url: url,
  async: true,
  dataType : 'xml',
  crossDomain:true,
  success: function(data, status, xhr) {
    console.log(data);
  }
});

收到回复:

XMLHttpRequest cannot load http://www.labs.skanetrafiken.se/v2.2/neareststation.asp?latitude=55.720504899999995&longitude=13.1927948.
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://stackoverflow.com' is therefore not allowed access.

然而,当我从我的终端尝试同样的请求时,就像这样

curl "http://www.labs.skanetrafiken.se/v2.2/neareststation.asp?x=55.720504899999995&y=13.1927948&R=1000"

我得到了我正在寻找的答案。我怎么能绕过这个呢?不必设置服务器的唯一目的是curl API。

3 个答案:

答案 0 :(得分:1)

您无法通过Javascript执行此请求,因为No 'Access-Control-Allow-Origin' header is present on the requested resource.

因此资源http://www.labs.skanetrafiken.se不允许跨域请求。虽然此Access-Control-Allow-Origin属性不会设置为*http://www.labs.skanetrafiken.se服务器上的其他允许域,但您无法对此进行跨域请求API。

CORS

的说明

答案 1 :(得分:1)

正如其他人所写,这是一种Web浏览器的安全机制,您不能只是按照自己的意愿制作跨域请求(这可以防止大量的XSS攻击)。 CORS可用于允许某些类型的请求,但似乎该站点不支持此。

因此,您可以要求服务提供商修复其服务,或在您的后端执行API调用,并将JSON结果发送给您的客户。

CURL之所以有效,是因为它没有像Web浏览器那样严格的安全措施。

答案 2 :(得分:0)

您需要进行CORS(跨源资源共享)请求。我想参考this文章。