【问题标题】:Difference between curl and ajaxcurl和ajax的区别
【发布时间】:2015-09-29 10:58:25
【问题描述】:

我正在尝试通过 react 应用与 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"

我得到了我正在寻找的响应。我该如何规避呢?不必为了curlAPI 的唯一目的而设置服务器会很好。

【问题讨论】:

标签: javascript ajax curl


【解决方案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的描述

【讨论】:

  • curl 将什么设置为原点?
  • @Albin 此限制仅适用于浏览器的请求
【解决方案2】:

正如其他人所写,这是 Web 浏览器的一种安全机制,您不能随心所欲地发出跨域请求(这可以防止大量 XSS 攻击)。 CORS 可用于允许某些类型的请求,但该站点似乎不支持这一点。

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

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

【讨论】:

    【解决方案3】:

    您需要提出 CORS(跨域资源共享)请求。我想参考this的文章。

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 2011-02-20
      • 2012-04-10
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多