Подтвердить что ты не робот

Как установить заголовок авторизации (OAuth token) на запрос OKHTTPClient от Android

Я могу настроить заголовок Auth на обычные запросы HTTPURLConnection следующим образом:

URL url = new URL(source);  
HttpURLConnection connection = this.client.open(url);  
connection.setRequestMethod("GET");  
connection.setRequestProperty("Authorization", "Bearer " + token);  

Это стандарт для HttpURLConnection. В приведенном выше фрагменте кода this.client есть экземпляр Square OkHTTPClient (здесь).

Мне интересно, существует ли OkHTTP -специальный способ установки заголовка Auth? Я вижу класс OkAuthenticator, но неясно, как именно его использовать/похоже, что он только обрабатывает проблемы аутентификации.

Спасибо заранее за любые указатели.

4b9b3361

Ответ 1

Если вы используете текущую версию (2.0.0), вы можете добавить заголовок к запросу:

Request request = new Request.Builder()
            .url("https://api.yourapi...")
            .header("ApiKey", "xxxxxxxx")
            .build();

Вместо использования:

connection.setRequestMethod("GET");    
connection.setRequestProperty("ApiKey", "xxxxxxxx");

Однако для более старых версий (1.x) я считаю, что реализация, которую вы используете, является единственным способом достижения этого. Как их журнал изменений:

Версия 2.0.0-RC1 2014-05-23

Новые типы запросов и ответов, каждый со своим собственным застройщиком. Также существует класс RequestBody для записи тела запроса в сеть и ResponseBody для чтения тела ответа из сети. Отдельный класс заголовков предлагает полный доступ к заголовкам HTTP.

Ответ 2

https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/com/squareup/okhttp/recipes/Authenticate.java

client.setAuthenticator(new Authenticator() {
  @Override public Request authenticate(Proxy proxy, Response response) {
    System.out.println("Authenticating for response: " + response);
    System.out.println("Challenges: " + response.challenges());
    String credential = Credentials.basic("jesse", "password1");
    return response.request().newBuilder()
        .header("Authorization", credential)
        .build();
  }

  @Override public Request authenticateProxy(Proxy proxy, Response response) {
    return null; // Null indicates no attempt to authenticate.
  }
});