【发布时间】:2017-06-22 13:44:08
【问题描述】:
背景:
我在测试服务器上安装了 mantisBT 2.5.0,启用了 REST API(目前处于测试阶段)。之后,我生成了一个 API 密钥,并尝试使用 /api/rest/swagger 上的 swagger 页面发出测试 HTTP 请求。这工作正常。 (我只能在将 .htaccess 重命名为 _htaccess 后才能访问此页面)
我想做的事:
我想在我的应用程序中实现一项功能,以便在不直接访问 mantisBT 的情况下发送“简单”的错误报告。为了测试 API,我实现了这个函数,它只调用一个“get issue”请求。如果可行,我可以实现一种方法来创建问题。
问题:
我无法将带有 API 令牌的属性“授权”添加到请求的 HTTP 标头中。结果是每次我发出请求时都会收到 HTTP 错误 401。这似乎是授权问题。
测试功能:
/**
* function to test the API
* @returns {Observable<Response>}
*/
getIssue(): Observable<Response> {
const api_token = 'XXXXXX';
const params: URLSearchParams = new URLSearchParams();
params.set('id', '1');
const url = 'https://anydomain/mantisbt/api/rest/issues';
const requestOptions = new RequestOptions({
method: RequestMethod.Get,
url: url,
params: params,
headers: new Headers({
'Content-Type': 'application/json',
'Authorization': api_token
})
});
const req = new Request(requestOptions);
return this.http.request(req);
}
...
this.getIssue().subscribe((result)=>{console.log(result)});
从控制台(Chrome)复制的请求标头:
:authority:XXXXXXXX
:method:OPTIONS
:path:/mantisbt/api/rest/issues?id=1
:scheme:https
accept:*/*
accept-encoding:gzip, deflate, sdch, br
accept-language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
access-control-request-headers:authorization,content-type
access-control-request-method:GET
dnt:1
origin:http://localhost
referer:http://localhost/login
user-agent:XXXXXXXX
我认为错误是请求标头设置不正确。例如,它们不应具有名称“访问控制请求标头”,而应仅具有“授权”名称。如何正确设置标题?
编辑:如果我将我的应用程序托管在与 mantisBT 相同的域上,则一切正常。我不明白为什么。我将header( 'Access-Control-Allow-Origin: *' ); 添加到/api/rest/index.php
编辑:这似乎是服务器端的错误。现在我得到这个错误:
XMLHttpRequest cannot load https://XXXXXX/api/rest/issues?id=1.
Response for preflight has invalid HTTP status code 401
这肯定与身份验证标头未正确发送这一事实有关。
【问题讨论】:
标签: angular rest httprequest mantis