Как установить заголовок авторизации (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
, но неясно, как именно его использовать/похоже, что он только обрабатывает проблемы аутентификации.
Спасибо заранее за любые указатели.
Ответы
Ответ 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.
}
});