Android OkHttp со стандартной аутентификацией

Я пользуюсь библиотекой OkHttp для нового проекта и впечатлен его простотой использования. У меня теперь есть потребность использовать Стандартную аутентификацию. К сожалению, существует недостаток рабочего примера кода. Я ищу пример того, как передать имя пользователя / учетные данные пароля в OkAuthenticator, когда с заголовком HTTP 401 встречаются. Я просмотрел этот ответ:

Модифицируйте запрос POST w/Основная Аутентификация HTTP: "Не может повторить переданное потоком Тело HTTP"

но это не получило меня слишком далеко. Образцы на OkHttp github repo не показали основанный на аутентификации образец также. У кого-либо есть суть, или другой пример кода для получения меня указал в правильном направлении? Спасибо за Вашу помощь!

60
задан 23 May 2017 в 14:55

2 ответа

В моем случае это только работало, когда я интегрировал авторизацию в заголовок (Версия 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();
1
ответ дан 31 October 2019 в 16:37

Это - отрывок для Клиента 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());

                }
            });
0
ответ дан 31 October 2019 в 16:37

Другие вопросы по тегам:

Похожие вопросы: