Contexte:Comment faire HTTP REQUEST à l'API REST de mantisBT en utilisant Http angulaire?
I installé sur MantisBT 2.5.0 un serveur de test, a permis à l'API REST (qui est actuellement en phase bêta). Après cela, j'ai généré une clé API et j'ai essayé de faire une demande de test HTTP en utilisant la page swagger sur/api/rest/swagger. Cela fonctionne bien. (Je ne pouvais accéder à cette page de renommer le fichier .htaccess à _htaccess)
Ce que je veux faire:
Je veux implémenter une fonctionnalité dans mon application pour permettre l'envoi de rapports de bugs « facile » sans visiter mantisBT directement. Pour tester l'API, j'ai implémenté cette fonction, qui appelle simplement une requête "get issue". Si cela fonctionne, je peux implémenter une méthode pour créer un problème.
Problème:
Je ne peux pas ajouter l'attribut « Autorisation » avec mon jeton d'API pour les en-têtes HTTP de ma demande. Le résultat est que chaque fois que je fais la demande, je reçois une erreur HTTP 401. Cela semble être un problème d'autorisation.
Fonction test:
/**
* 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)});
tête de demande copié à partir de la console (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
Je pense que l'erreur est que l'en-tête de demande ne sont pas réglées correctement. Ils ne devraient pas avoir le nom 'access-control-request-headers' mais plutôt 'Authorization' seulement, par exemple. Comment puis-je définir les en-têtes correctement?
EDIT: Si j'héberge mon application sur le même domaine, comme mantisBT, tout fonctionne correctement. Je ne comprends pas pourquoi. J'ai ajouté header('Access-Control-Allow-Origin: *');
à /api/rest/index.php
EDIT: Il semble qu'il y ait une erreur côté serveur. Maintenant, je reçois cette erreur:
XMLHttpRequest cannot load https://XXXXXX/api/rest/issues?id=1.
Response for preflight has invalid HTTP status code 401
Il a définitivement quelque chose à voir avec le fait que l'en-tête d'authentification n'est pas envoyé correctement.
qui ne fonctionne pas ... Je reçois le même message d'erreur que précédemment. Un autre point que je lis de l'onglet 'réseau' de la webconsole sont ces lignes: "Demander l'URL: http: // anydomain/mantisbt/api/rest/issues?id = 1 Méthode de requête: OPTIONS Code d'état: 401 Jeton API requis " Il semble que l'en-tête Autorisation n'a pas été envoyé correctement ... – geronimo678
Dans mon projet, j'utilise comme ceci headers.append ('Authorization' : 'Porteur' + mytoken); – CharanRoot
Utilisez-vous aussi mantisBT? – geronimo678