背景:如何使用angular Http将HTTP REQUEST发送到mantisBT的REST API?
我测试服务器上安装mantisBT 2.5.0,启用REST API(这是目前在β相)。之后,我生成了一个API密钥,并试图使用/ api/rest/swagger上的swagger页面进行测试HTTP请求。这工作正常。 (我只能重命名后的.htaccess访问该页面_htaccess)
我想要做什么:
我要实现我的应用程序功能,可发送“易”错误报告而不必访问mantisBT直接。为了测试API,我实现了这个函数,它只是调用“get issue”请求。如果这有效,我可以实施一种方法来创建问题。
问题:
我不能用我的API令牌添加属性“授权”我的请求的HTTP标头。结果是每次发出请求时,我都会收到一个HTTP Error 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)});
请求报头从控制台(铬)复制:
: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
我认为错误是请求头设置不正确。例如,它们不应具有“access-control-request-headers”这个名称,而应该只有“Authorization”。我如何正确设置标题?
编辑:如果我在像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
它确实与事实有关,验证头没有正确发送。
不起作用...我得到和以前一样的错误信息。我从webconsole的“网络”选项卡读取的另一点是这些行: “请求URL:http:// anydomain/mantisbt/api/rest/issues?id = 1 请求方法:选项 状态代码:401 API令牌需要“ 看来,授权标头没有正确发送... – geronimo678
在我的项目中,我使用像这样headers.append('授权' :'Bearer'+ mytoken); – CharanRoot
你也使用mantisBT吗? – geronimo678