J'écris une application web qui peut afficher le résultat d'odeur de code du Sonarqube, mais je veux aussi qu'elle puisse parfois créer des règles personnalisées. Actuellement, je suis en mesure d'obtenir les données du serveur en utilisant HTTPClient en Java ou XMLHttpRequest en Js. Cependant, je suis vraiment bloqué sur le message POST au serveur.SonarQube Comment se connecter avec l'API Web
En Js, j'ai essayé ce code pour vous identifier: (CORS a été désactivé dans mon chrome)
request.open("POST", "http://localhost:9000/api/authentication/login?login=admin&password=admin", true);
request.send();
Le code d'état de réponse est 200
qui est couronnée de succès. Cependant, lorsque je tente d'effectuer une action qui a besoin de l'autorisation
request.open("POST", "http://localhost:9000/api/qualityprofiles/copy?fromKey=" + fromKey + "&toName=" + name, true);
request.send();
Le résultat est 401
, non autorisé.
Après quelques recherches, j'ai changé mon code pour
var base64encodedData = ("admin:admin").toString('base64');
request.open("POST", "http://localhost:9000/api/qualityprofiles/copy?fromKey=" + fromKey + "&toName=" + name, true);
request.setRequestHeader("Authorization", "Basic " + base64encodedData);
request.send();
La réponse est 405
, aucune méthode trouvée. Après d'autres recherches, quelqu'un a mentionné que request.withCredentials
devrait être défini sur true
. J'ai ajouté, puis j'ai encore eu le problème de CORS. (avec le CORS désactivé)
(Je suis un peu confus au sujet de l'API Sonarqube La raison pour laquelle je dis cela est, à mon avis, le but de cette API est de simplifier la méthode pour jouer avec le serveur Sonarqube Cependant, puisqu'il n'autorise pas CORS, cela signifie-t-il que je ne peux pas utiliser l'API sur ma propre page Web?)
Puisqu'il n'y a pas de chance dans Js, je suis passé à Java.
En Java, j'ai couru ceci: (je l'ai fait aussi bien connecte)
HttpPost post = new HttpPost("http://localhost:9000/api/qualityprofiles/copy?fromKey=AV7dToVK_BWPTtE1c9vU&toName=testtt");
try(CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(post);) {
System.out.println(response.getStatusLine());
}
J'obtenu:
HTTP/1.1 401
Puis-je changer mon code suivre ce lien à propos Basic Authentication with the API
CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials
= new UsernamePasswordCredentials("admin", "admin");
provider.setCredentials(AuthScope.ANY, credentials);
HttpClient client = HttpClientBuilder.create()
.setDefaultCredentialsProvider(provider)
.build();
HttpResponse response = client.execute(
new HttpPost("http://localhost:9000/api/qualityprofiles/copy?fromKey=AV7dToVK_BWPTtE1c9vU&toName=testtt"));
int statusCode = response.getStatusLine().getStatusCode();
System.out.println(statusCode);
Encore une fois,En résumé, ma question est: Comment puis-je utiliser le code Java ou le code Js (préféré) pour envoyer des messages POST au serveur SonarQube avec autorisation?
Appréciez pour toute aide!
MISE À JOUR
Je suis maintenant essayer avec boucle, voici ce que je cours dans le terminal
curl -X POST -u deb3dd4152c571bcdb7b965e1d99b23a4e5c9505: http://localhost:9000/api/qualityprofiles/copy?fromKey=AV7dToVK_BWPTtE1c9vU&toName=test_file
Et je suis arrivé cette réponse, que je ne sais pas comment
{"errors":[{"msg":"The 'toName' parameter is missing"}]}
Deuxième mise à jour sur CURL
Je couru:
curl -X POST -F "fromKey=AV7dToVK_BWPTtE1c9vU;toName=test_file" -v -u deb3dd4152c571bcdb7b965e1d99b23a4e5c9505: http://localhost:9000/api/qualityprofiles/copy
Résultat:
* Trying ::1...
* Connected to localhost (::1) port 9000 (#0)
* Server auth using Basic with user 'deb3dd4152c571bcdb7b965e1d99b23a4e5c9505'
> POST /api/qualityprofiles/copy HTTP/1.1
> Host: localhost:9000
> Authorization: Basic ZGViM2RkNDE1MmM1NzFiY2RiN2I5NjVlMWQ5OWIyM2E0ZTVjOTUwNTo=
> User-Agent: curl/7.49.1
> Accept: */*
> Content-Length: 179
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------c22bb5dd76f44ac4
>
< HTTP/1.1 100
< HTTP/1.1 400
< Content-Type: application/json
< Content-Length: 56
< Date: Wed, 04 Oct 2017 00:43:47 GMT
< Connection: close
<
* Closing connection 0
{"errors":[{"msg":"The 'toName' parameter is missing"}]}
Êtes-vous en mesure de vous connecter avec ces informations d'identification sur le portail Sonar? – Rizwan
@Rizwan oui, j'utilise les informations de connexion par défaut qui est login: admin, pwd: admin – MaXon
Je suis même capable de se connecter quand j'appelle 'request.open (" POST "," http: // localhost: 9000/api/authentification/login? Login = admin & password = admin ", true);' – MaXon