【问题标题】:From CURL to AJAX XMLHttp从 CURL 到 AJAX XMLHttp
【发布时间】:2016-12-12 10:25:34
【问题描述】:

由于平台限制,我正在尝试将 curl 代码从名为 TextRazor 的 API 转换为 AJAX XMLHttp。我从社区的类似问题中尝试了许多解决方案,但似乎无法取回任何数据或只是“400:错误请求”。如果这很重要,从调用 API 的文档中看起来像这样:

curl -X POST \
-H "x-textrazor-key: YOUR_API_KEY" \
-d "extractors=entities,entailments" \
-d "text=Spain's stricken Bankia expects to sell off..." \
https://api.textrazor.com/

我当前的 AJAX XMLHttp 代码如下所示:

var xhttp = new XMLHttpRequest();
var url = "https://api.textrazor.com/";
var params = "extractors=entities&text=Spain's stricken Bankia expects to sell...";
xhttp.open("POST", url, true);

xhttp.setRequestHeader("x-textrazor-key", "YOUR_API_KEY");
xhttp.setRequestHeader("Content-length", params.length);

xhttp.onreadystatechange = function() {
if(xhttp.readyState == 4 && xhttp.status == 200) {
    alert(xhttp.responseText);
}
}

xhttp.send(params);

感谢您的支持!

【问题讨论】:

    标签: javascript ajax curl xmlhttprequest


    【解决方案1】:

    你遇到了same origin policy

    由于您正在发出跨域请求并添加自定义标头,因此浏览器在发出您请求的请求之前会发出preflight OPTIONS request

    您向其发出请求的服务器未准备好响应 OPTIONS 请求,因此它会向您返回 400。

    解决这个问题:

    • 他们应该支持 CORS
    • 他们应该提供另一种获取数据的方法,例如 JSONP(不推荐,我们现在有 CORS)
    • 您不应从浏览器直接向他们的服务器发出请求

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 2012-01-07
      相关资源
      最近更新 更多