android - 如何为 okhttp 2.x 请求指定默认用户代理

标签 android square okhttp

我在我的 Android 应用中使用 okhttp 2.0,但没有找到为所有传出请求设置一些通用用户代理的方法。

我想我可以做类似的事情

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

...但是没有这样的方法或类似的方法。 当然,我可以提供一些扩展实用程序方法来包装 RequestBuilder 以附加 .header("UserAgent") 然后我会用它来构建我所有的请求,但我想也许我错过了一些现有的更简单的方法?

最佳答案

您可以使用拦截器将 User-Agent header 添加到您的所有请求中。

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

关于android - 如何为 okhttp 2.x 请求指定默认用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509107/

相关文章:

iphone - 绕中心点旋转对象

java - 在外部库中启用日志记录

java - java中不同字符的空心正方形

android - 如何在okhttp3中设置连接超时?

java - 调用okhttp3的测试方法

android - MediaPlayer 在大约 5 秒后停止播放

android - 带有 recyclerView 的 PagingLibrary 无法停止 loadAfter()

CSS响应式正方形网格

android - 使用 okhttp 找不到证书路径的信任 anchor

java - 在此代码示例中,AssetManager 类成员是否会被 JVM 垃圾回收?