OkHttp 添加基本认证头

Ger*_*rke 1 android okhttp

我想将基本身份验证标头添加到我使用 OkHttp3 完成的请求中。

这是我的代码:

        // Adding Authentication Header
        OkHttpClient.Builder client = new OkHttpClient.Builder();
        client.authenticator(new Authenticator() {
            @Override
            public Request authenticate(Route route, Response response) throws IOException {
                String credential = Credentials.basic(username, password);
                return response.request().newBuilder().header("Authorization", credential).build();
            }
        });

        // 
        client.connectTimeout(10, TimeUnit.SECONDS);
        client.writeTimeout(10, TimeUnit.SECONDS);
        client.readTimeout(10, TimeUnit.MINUTES);

        RequestBody body = RequestBody.create(null, new byte[]{});
        if( json != null) {
            body = RequestBody.create(MediaType.parse(
                    "application/json"),
                    json.toString()
            );
        }

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();

        client.build().newCall(request).enqueue(callback);
Run Code Online (Sandbox Code Playgroud)

不幸的是没有添加身份验证标头,我真的找不到错误。

fra*_*kee 5

Authenticator主要用于“反应式”身份验证,即不会每次都自动调用。其自动调用的主要场景是 401“未经授权”服务器响应。

您可能应该为您的案例使用常规拦截器,只需使用您的client构建器注册它,如下所示:

client.addInterceptor(
   object : Interceptor { chain ->
       val request = chain.request().newBuilder()
            .addHeader(...)
            .build()
       return chain.proceed(request)
   }
)
Run Code Online (Sandbox Code Playgroud)