我在我的 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/