2017-10-03 15 views
0

Sonarqubeのコードの匂いの結果を表示できるWebアプリケーションを作成していますが、時にはカスタムルールを作成することもできます。現在、JavaのHTTPClientまたはJsのXMLHttpRequestを使用してサーバーからデータを取得できます。しかし、私は本当にサーバーへのPOSTメッセージに固執しています。SonarQube Web APIを使用してログインするには

はJsのでは、私がログインするために、これらのコードを試してみた:

request.open("POST", "http://localhost:9000/api/authentication/login?login=admin&password=admin", true); 
request.send(); 

応答ステータスコードが成功した200です(CORSは私のクロムで無効にされています)。しかし、私は結果が不正、401で許可

request.open("POST", "http://localhost:9000/api/qualityprofiles/copy?fromKey=" + fromKey + "&toName=" + name, true); 
request.send(); 

を必要とするいくつかのアクションを実行しようとします。

は、いくつかの研究の後、私は

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(); 

応答が405あるに私のコードを変更した、いかなる方法が見つかりませんでした。

さらに調査したところ、request.withCredentialstrueに設定する必要があります。私は追加して、私は再びCORSの問題がある。 (CORSが無効になっている)

(私はSonarqube APIについて混乱しています。これは私の意見では、このAPIの目的は、Sonarqubeサーバーで再生する方法を簡略化することですCORSを許可していないため、自分のWebページでAPIを使用できないのですか?)

Jsに運がないので、Javaに切り替えました。 (私もログインやった)

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()); 
} 

私が得た::

は、Javaでは、私はこれを実行した

HTTP/1.1 401 

は、その後、私は、このリンクをたどって自分のコードを変更について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); 

もう一度、401

私の質問は、JavaコードまたはJsコード(推奨)を使用してSonarQubeサーバーへの承認メッセージを送信する方法です。

お気軽にお問い合わせください!

は、UPDATE、私は今、カールとしようとしている

は、ここで私は、端末

curl -X POST -u deb3dd4152c571bcdb7b965e1d99b23a4e5c9505: http://localhost:9000/api/qualityprofiles/copy?fromKey=AV7dToVK_BWPTtE1c9vU&toName=test_file 

で実行され、私は知らないこの応答を、得たものであるか

{"errors":[{"msg":"The 'toName' parameter is missing"}]} 

CURLの第2の更新

私が走った:

curl -X POST -F "fromKey=AV7dToVK_BWPTtE1c9vU;toName=test_file" -v -u deb3dd4152c571bcdb7b965e1d99b23a4e5c9505: http://localhost:9000/api/qualityprofiles/copy 

結果:同じ問題を持って誰のための

* 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"}]} 
+1

これらの資格情報でSonarポータルにログインできますか? – Rizwan

+0

@Rizwanはい、私はログインのデフォルトのログイン情報を使用しています:admin、pwd:admin – MaXon

+0

私は 'request.open(" POST "、" http:// localhost: ' – MaXon

答えて

1

を。 Javaコードで作業しています。コードは

HttpPost post = new HttpPost("http://localhost:9000/api/qualityprofiles/copy?fromKey=AV7dToVK_BWPTtE1c9vU&toName=testtt"); 
post.setHeader("Authorization", "Basic ZGViM2RkNDE1MmM1NzFiY2RiN2I5NjVlMWQ5OWIyM2E0ZTVjOTUwNTo="); 
try(CloseableHttpClient httpClient = HttpClients.createDefault(); 
     CloseableHttpResponse response = httpClient.execute(post);) { 

    System.out.println(response.getStatusLine()); 
} 

です。ヘッダーを設定する行が追加されています。私はログインとパスワードをこのbase64形式にエンコードする前に、何か類似したことをやったことがありますが、何とかしていません。このコード化された文字列は、CURLメソッドから取得していました。

私はいくつかのオンラインbase64エンコーディングとデコードツールを試しましたが、結果はCURLメソッドのものと一致しません。したがって、これに苦労している場合は、CURLを実行してエンコードされたヘッダーとそれを渡す!もし誰かがより良いバージョンを説明できるなら、それは素晴らしいでしょう!

また、私はまだJsのバージョンを動作させることに興味があります。あなたが答えを知っているなら、共有してください!

関連する問題