Как указать пользовательский агент по умолчанию для запросов okhttp 2.x

Я использую okhttp 2.0 в своем приложении для Android и не нашел способ установить какой-либо общий User Agent для всех исходящих запросов.

Я думал, что смогу сделать что-то вроде

OkHttpClient client = new OkHttpClient(); client.setDefaultUserAgent(...) 

… но нет такого метода или подобного. Конечно, я мог бы предоставить некоторый метод утилит расширения, который бы обернул RequestBuilder для присоединения .header("UserAgent") а затем я буду использовать его для построения всех моих запросов, но я подумал, может быть, я пропустил какой-то существующий и более простой способ?

Solutions Collecting From Web of "Как указать пользовательский агент по умолчанию для запросов okhttp 2.x"

Вы можете использовать перехватчик, чтобы добавить заголовок User-Agent ко всем вашим запросам.

Для получения дополнительной информации о okHttp-перехватчиках см. https://github.com/square/okhttp/wiki/Interceptors

Пример реализации этого перехватчика:

 /* This interceptor adds a custom User-Agent. */ public class UserAgentInterceptor implements Interceptor { private final String userAgent; public UserAgentInterceptor(String userAgent) { this.userAgent = userAgent; } @Override public Response intercept(Chain chain) throws IOException { Request originalRequest = chain.request(); Request requestWithUserAgent = originalRequest.newBuilder() .header("User-Agent", userAgent) .build(); return chain.proceed(requestWithUserAgent); } } 

Тест для UserAgentInterceptor:

 public void testUserAgentIsSetInRequestHeader() throws Exception { MockWebServer server = new MockWebServer(); server.enqueue(new MockResponse().setBody("OK")); server.play(); String url = server.getUrl("/").toString(); OkHttpClient client = new OkHttpClient(); client.networkInterceptors().add(new UserAgentInterceptor("foo/bar")); Request testRequest = new Request.Builder().url(url).build() String result = client.newCall(testRequest).execute().body().string(); assertEquals("OK", result); RecordedRequest request = server.takeRequest(); assertEquals("foo/bar", request.getHeader("User-Agent")); } 

OkHttp v2.1, который будет выпущен в течение следующих нескольких недель , автоматически установит заголовок User-Agent если он еще не установлен.

На данный момент нет хорошего способа добавить этот заголовок к каждому запросу централизованно. Единственным обходным решением является включение заголовка вручную для каждого создаваемого Request .

Использование перехватчика больше не требуется в более новых версиях OkHttp. Добавление пользовательского агента так же просто, как:

 Request request = new Request.Builder() .url("http://www.publicobject.com/helloworld.txt") .header("User-Agent", "OkHttp Example") .build(); 

Источник: OkHttp wiki .