Базовая аутентификация - работа с API, но не с вычисляемым заголовком - почему? - PullRequest
0 голосов
/ 17 октября 2018

В рамках рефакторинга, который я делаю, я пытаюсь заменить код, выполняющий Http Basic Authentication с использованием API, на предварительно рассчитанный заголовок «Authentication».

Это работало нормально дляя с одним клиентом, но не с другим, что подробно описано ниже.С этим я получаю «Требуется авторизация!»Ошибка.

Можете ли вы помочь мне понять, почему?Насколько я понимаю, эти два варианта должны быть одинаковыми, не так ли?

Рабочий код:

//Set credentials using the API:
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("user1","pswd1");
AuthScope authScope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT);
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(authScope, credentials);

//Init HttpClient:
CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).useSystemProperties().build();

//Execute request
String fullURI = getCdrsRequestURI(fromTime, toTime, limit, startFromResultIndex); //Some http uri
HttpGet httpGet = new HttpGet(new URI(fullURI));

HttpResponse httpResponse = httpClient.execute(httpGet); //Returns 200 OK status

Не рабочий код:

//Init HttpClient:
CloseableHttpClient httpClient = HttpClientBuilder.create().build();

String fullURI = getCdrsRequestURI(fromTime, toTime, limit, startFromResultIndex);
HttpGet httpGet = new HttpGet(new URI(fullURI));

//Set basic authentication header
String authStr = MessageFormat.format("{0}:{1}", "user1", "pswd1");
String encoding = Base64.getEncoder().encodeToString(authStr.getBytes("UTF-8"));
httpGet.setHeader("Authorization", "Basic " + encoding);

//Execute request
HttpResponse httpResponse = httpClient.execute(httpGet); //Returns 401 code

С уважением,

Кармель

...