Я пишу короткую программу для сбора метрик из проектов в SonarQube.
Я использую два из apis SonarQube: api / компоненты / поиск и api / меры / компонент.
Я выполняю аутентификацию с использованием токена, и без проблем выполнил это с помощью обычной команды curl для обоих.
В моей Java-программе компонент api хорошо аутентифицируется и возвращает результаты.Тем не менее, поиск API (при аутентификации точно таким же методом) просто возвращает:
{"errors":[{"msg":"Authentication is required"}]}
Любые идеи о том, почему два API проявляют различное поведение при вызове в программе Java?
Выполнение команд curl (работает для обоих):
curl -u TOKEN: https://sonarqube-XXX.co.uk/api/components/search?qualifiers=DIR&q=master
curl -u TOKEN: https://sonarqube-XXX.co.uk/api/measures/component?componentId=XXX&metricKeys=coverage
Java-код для аутентификации и HTTP-запрос с API поиска (работает для API компонента):
CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(TOKEN, "");
provider.setCredentials(AuthScope.ANY, credentials);
HttpClient httpClient = HttpClientBuilder.create()
.setDefaultCredentialsProvider(provider)
.build();
HttpGet httpGet = new HttpGet("https://sonarqube-XXX.co.uk/api/components/search?qualifiers=DIR&q=master");
HttpResponse response = httpClient.execute(httpGet);
String componentInfo = EntityUtils.toString(response.getEntity());