Я пользуюсь библиотекой OkHttp для нового проекта и впечатлен его простотой использования. У меня теперь есть потребность использовать Стандартную аутентификацию. К сожалению, существует недостаток рабочего примера кода. Я ищу пример того, как передать имя пользователя / учетные данные пароля в OkAuthenticator, когда с заголовком HTTP 401 встречаются. Я просмотрел этот ответ:
но это не получило меня слишком далеко. Образцы на OkHttp github repo не показали основанный на аутентификации образец также. У кого-либо есть суть, или другой пример кода для получения меня указал в правильном направлении? Спасибо за Вашу помощь!
В моем случае это только работало, когда я интегрировал авторизацию в заголовок (Версия 4.0.1 OkHttp):
Request request = new Request.Builder()
.url("www.url.com/api")
.addHeader("Authorization", Credentials.basic("username", "password"))
.build();
Request response = client.newCall(request).execute();
Это - отрывок для Клиента OkHttp:
OkHttpClient client = new OkHttpClient.Builder()
.authenticator(new Authenticator() {
@Override public Request authenticate(Route route, Response
response) throws IOException {
if (response.request().header("Authorization") != null) {
return null; // Give up, we've already attempted to
authenticate.
}
System.out.println("Authenticating for response: " + response);
System.out.println("Challenges: " + response.challenges());
String credential = Credentials.basic(username, password);
return response.request().newBuilder()
.header("Authorization", credential)
.build();
}
}) .build();
<час> Делают запрос теперь. Основной автор пойдет, поскольку у клиента уже есть это.
Request request = new Request.Builder().url(JIRAURI+"/issue/"+key).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.out.println("onFailure: "+e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
System.out.println( "onResponse: "+response.body().string());
}
});