【发布时间】:2019-03-19 08:50:17
【问题描述】:
我正在尝试从位于身份验证层后面的 API 获取响应。我首先需要使用类似这样的 json 请求 POST 请求。
{"username":"apitest",
"password":"testapi@321"
}
假设 api url 是http://test-oms-test-staging.com.au/test/auth
我得到一个响应正文中包含以下内容的 json 响应:
"token": "abcdefghabcdefgh"
现在我需要将令牌作为标头 "x-auth-token": 传递到其中包含参数的 API 中,以获取需要在 html 页面中显示的响应。
到目前为止,我已经能够做到以下几点
function begin() {
var xhr = new XMLHttpRequest();
var url = "http://test-oms-test-staging.com.au/test/auth";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
var string = json['token'];
console.log(string);
}
}
var data = JSON.stringify({"username": "apitest", "password":
"testapi@321"});
xhr.send(data);
}
现在,当我在标头中使用响应令牌查询第二个 API URL 时,我收到以下错误。
Response for preflight is invalid (redirect)
如果我的要求太宽泛或不够详细,我深表歉意,我对编程很陌生。我做了一些研究,发现由于服务器安全性,我的请求被重新定向。我是否在做正确的事情,将其视为两种单独的方法?再次感谢您。
编辑 发生这种情况是因为 API 正在触发需要验证的 OPTIONS 请求。我在想这是因为我作为两个单独的请求执行此操作(首先是 POST 请求以检索响应正文中的令牌,第二个“GET”以将令牌作为标头传递。在第二个请求中,触发了飞行前发送一个经过身份验证的 OPTION 请求这就是为什么我现在收到 401“未验证”错误。在为可能的重复提供的链接中,除了将服务器编辑为“未验证”之外,没有其他答案,这不是一个有效的解决方案。
【问题讨论】:
标签: javascript json xmlhttprequest