Android アプリで okhttp 2.0 を使用していますが、すべての送信リクエストに共通のユーザー エージェントを設定する方法が見つかりませんでした。
私はこんなことができると思った
OkHttpClient client = new OkHttpClient();
client.setDefaultUserAgent(...)
...しかし、そのような方法や類似の方法はありません。もちろん、RequestBuilder をラップしてアタッチする拡張ユーティリティ メソッドを提供して.header("UserAgent")
、それをすべてのリクエストの構築に使用することもできますが、既存のより簡単な方法を見逃しているのではないかと思いました。
ベストアンサー1
インターセプターを使用して、すべてのリクエストに User-Agent ヘッダーを追加できます。
okHttpインターセプターの詳細については、http://square.github.io/okhttp/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"));
}