How to specify a default user agent for okhttp 2.x requests

后端 未结 6 1449
心在旅途
心在旅途 2021-01-31 02:01

I am using okhttp 2.0 in my Android app and didn\'t find a way to set some common User Agent for all outgoing requests.

I thought I could do something like



        
6条回答
  •  抹茶落季
    2021-01-31 02:16

    You can use an interceptor to add the User-Agent header to all your requests.

    For more information about okHttp interceptors see http://square.github.io/okhttp/interceptors/

    Example implementation of this interceptor:

    /* 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);
        }
    }
    

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

提交回复
热议问题