Вызов API REST Confluence всегда возвращает 404 - Не найдено (проблема аутентификации?) - PullRequest
0 голосов
/ 18 декабря 2018

РЕДАКТИРОВАТЬ: ОК Я обнаружил, что это определенно проблема с аутентификацией: этот короткий скрипт Python прекрасно работает:

import requests
from requests.auth import HTTPBasicAuth

URL = "https://wiki.myCompany.corp/confluence-dev/rest/api/content/180158489";

r = requests.get(URL, auth = HTTPBasicAuth('myUser', 'myPass'), verify=False)
r.raise_for_status()
print(r.json())

Почему он не работает с Java??

Исходный вопрос:

Я пытаюсь написать простой Http-запрос, используя Apache httpclient / httpcore для получения содержимого страницы Confluence, но все, что яget is status 404.

Это мой код:

String url = "https://wiki.mycompany.corp/confluence-dev/rest/api/content/180158489";
HttpHost proxy = new HttpHost("proxy.myCompany.at", 57165);

DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("myUsername", "myPassword");

provider.setCredentials(AuthScope.ANY, credentials);

HttpClientBuilder builder = HttpClientBuilder.create();
builder.setDefaultCredentialsProvider(provider);
builder.setRoutePlanner(routePlanner);

HttpClient client = builder.build();
HttpGet get = new HttpGet(url); 

HttpResponse r = client.execute(get);
System.out.println(r.getStatusLine().toString());

Вывод: HTTP / 1.1 404 Не найдено

Когда я открываю этот URLв браузере я получаю правильное слияние JSON обратно, пока я вхожу в систему. Когда я выхожу и пытаюсь открыть этот URL в браузере, я получаю JSON

{
"statusCode":404,
"data":
{
"authorized":false,
"valid":true,
"allowedInReadOnlyMode":true,
"errors":[],"successful":false
},
"message":"No content found with id: ContentId{id=180158489}",
"reason":"Not Found"
}

Так что для меня это выглядиттак как-то аутентификация из моего кода не работает правильно.

У вас есть идеи, что здесь может быть не так?

1 Ответ

0 голосов
/ 19 декабря 2018

Хорошо, я нашел решение (как-то).В моем Java-коде аутентификация не работает (по каким-то причинам, я видел, как это делается в нескольких примерах ...).

В любом случае, что работает, если я устанавливаю свой заголовок вручную, вот так:

HttpGet request = new HttpGet(url);
String authorizationString = "Basic " + Base64.getEncoder().encodeToString(("myUser:myPass").getBytes()).replace("\n", "");             
request.setHeader(HttpHeaders.AUTHORIZATION, authorizationString);

HttpClient client = HttpClientBuilder.create().build();
HttpResponse response = client.execute(request);

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

Результат:

HTTP / 1.1 200 OK

...