#java #scala #rest
#java #scala #rest
Вопрос:
Я пытаюсь вызвать конечную точку REST, используя HttpGet, и передать учетные данные пользователя.
var content = ""
val httpClient : CloseableHttpClient = HttpClients.createDefault();
val httpResponse = new HttpGet(url)
httpResponse.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials(“uname”,”pwd”),”UTF-8", false))
val response = httpClient.execute(httpResponse)
val entity = httpResponse.getEntity()
val inputStream = entity.getContent()
content = fromInputStream(inputStream).getLines.mkString
inputStream.close
httpClient.getConnectionManager().shutdown()
return content
Похоже, что BasicScheme устарела в «org.apache.http.impl.auth». Любые указания о том, как двигаться дальше…
Заранее спасибо.
Ответ №1:
Учитывая, что вы пытаетесь использовать базовую аутентификацию, этого должно быть достаточно
val credentialsProvider = new BasicCredentialsProvider()
credentialsProvider.setCredentials(
AuthScope.ANY,
new UsernamePasswordCredentials("username", "password")
)
val httpClient =
HttpClientBuilder.create()
.setDefaultCredentialsProvider(credentialsProvider)
.build()
val httpResponse = new HttpGet(url)
httpClient.execute(httpResponse)
Если вместо этого вы предпочитаете использовать простой заголовок HTTP, вы можете использовать
def buildEncodedCredentials(): String = {
val credentialsString = username ":" password
val charset = StandardCharsets.ISO_8859_1
val encodedBytes = Base64.getEncoder().encode(credentialsString.getBytes(charset))
return new String(encodedBytes, charset)
}
httpResponse.addHeader(HttpHeaders.AUTHORIZATION, "Basic " buildEncodedCredentials())
Комментарии:
1. Спасибо @LppEdd — Я пытался использовать CredentialsProvider ранее, но я получаю ошибку 401 — error =»неавторизованный», error_description = «Для доступа к этому ресурсу требуется полная аутентификация» По какой-то причине вышеупомянутое решение не работает в моем случае…
2. @Anil попробуйте использовать простой способ заголовка и дайте мне знать. Мы можем начать чат, чтобы избежать рассылки спама в комментариях.
3. @Anil кстати, ты уверен, что это базовая аутентификация, которая тебе нужна?
4. По-прежнему 401 без описания ошибки org.apache.http.client.methods. CloseableHttpResponse = HttpResponseProxy{HTTP/1.1 401 [Параметры X-Content-Type: nosniff, X-XSS-Защита: 1; режим = блок, управление кэшем: без кэша, без хранилища, максимальный возраст= 0, обязательная проверка, Pragma: без кэша, срок действия: 0, параметры X-Frame: ЗАПРЕТИТЬ, WWW-Аутентификация: Базовая область = «Realm», тип содержимого: приложение / json; кодировка=UTF-8, Кодировка передачи: фрагментированная, Дата: Ср, 27 марта 2019 19:42:57 GMT, Соединение: закрыто] ResponseEntityProxy{[Тип содержимого: application/json; кодировка=UTF-8, Фрагментированный: true]}}
5. @Anil не могли бы вы опубликовать код Spark, который вы использовали для отправки запроса?