okhttp 2.x リクエストのデフォルトのユーザーエージェントを指定する方法 質問する

okhttp 2.x リクエストのデフォルトのユーザーエージェントを指定する方法 質問する

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"));
}

おすすめ記事