Hintergrund:Wie HTTP-REQUEST zu mantisBT REST API mit eckigen Http?
Ich installierte MantisBT 2.5.0 auf einem Testserver, aktivierte den REST-API (die derzeit in der Beta-Phase). Danach generierte ich einen API-Schlüssel und ich habe versucht, eine Test-HTTP-Anfrage unter Verwendung der Swagger-Seite an/api/rest/swagger zu machen. Das funktioniert gut. (Ich konnte nur auf diese Seite zugreifen, nachdem die .htaccess-Umbenennung in _htaccess)
Was ich tun möchte:
Ich möchte eine Funktion in meiner App implementieren, damit „easy“ Fehlerberichte zu senden, ohne den Besuch mantisBT direkt. Um die API zu testen, habe ich diese Funktion implementiert, die nur eine "Anfrage anfordern" -Aufforderung aufruft. Wenn dies funktioniert, kann ich eine Methode zum Erstellen eines Problems implementieren.
Problem:
ich das das Attribut 'Authorization' nicht hinzufügen kann, mit meinen API-Token an den HTTP-Header meiner Anfrage. Das Ergebnis ist, dass jedes Mal, wenn ich die Anfrage erstelle, ich einen HTTP-Fehler 401 erhalte. Es scheint ein Autorisierungsproblem zu sein.
Testfunktion:
/**
* 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)});
Request-Header von der Konsole kopiert (Chrom):
: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
Ich denke, der Fehler ist, dass die Request-Header nicht richtig eingestellt sind. Sie sollten nicht den Namen 'access-control-request-headers' haben, sondern beispielsweise nur 'Authorization'. Wie kann ich die Header richtig einstellen?
EDIT: Wenn ich meine app auf der gleichen Domain wie mantisBT hostet alles funktioniert gut. Ich verstehe nicht warum. Ich fügte hinzu header('Access-Control-Allow-Origin: *');
zu /api/rest/index.php
EDIT: Es scheint auf der Serverseite ein Fehler zu sein. Jetzt bekomme ich diesen Fehler:
XMLHttpRequest cannot load https://XXXXXX/api/rest/issues?id=1.
Response for preflight has invalid HTTP status code 401
Es definitiv etwas mit der Tatsache zu tun hat, dass die Authentifizierung Header nicht ordnungsgemäß gesendet wird.
das funktioniert nicht ... Ich bekomme die gleiche Fehlermeldung wie zuvor. Ein weiterer Punkt, den ich auf der Registerkarte 'Netzwerk' der Webkonsole gelesen habe, sind folgende Zeilen: "URL anfordern: http: // anydomain/mantisbt/api/rest/issues?ID = 1 Anforderungsmethode: OPTIONEN Statuscode: 401 API-Token erforderlich " Es scheint, dass der Berechtigungsheader nicht richtig gesendet wurde ... – geronimo678
In meinem Projekt verwende ich wie dieses headers.append ('Authorization' : 'Bearer' + mytoken); – CharanRoot
Benutzt du auch mantisBT? – geronimo678