Android OkHttp 如何添加Header

在Android开发中,我们经常需要使用网络请求库来发送HTTP请求。OkHttp是一个非常流行的网络请求库,它提供了丰富的功能和易于使用的API。在使用OkHttp发送请求时,我们经常需要添加一些自定义的Header,以便服务器能够正确地处理我们的请求。

本文将介绍如何使用OkHttp来添加Header,并提供了详细的代码示例和清晰的逻辑解释。

添加Header

使用OkHttp添加Header非常简单,只需要使用addHeader方法即可。下面是添加Header的示例代码:

OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request originalRequest = chain.request();

                // 创建新的请求Builder
                Request.Builder requestBuilder = originalRequest.newBuilder();

                // 添加Header
                requestBuilder.header("User-Agent", "OkHttp Example");
                requestBuilder.header("Authorization", "Bearer token");

                // 构建新的请求
                Request newRequest = requestBuilder.build();

                // 继续处理请求
                return chain.proceed(newRequest);
            }
        })
        .build();

在上面的代码中,我们创建了一个OkHttpClient,并使用addInterceptor方法添加了一个拦截器(Interceptor)。拦截器是OkHttp的一个强大功能,它可以在发送请求之前或者接收响应之后对请求和响应进行修改。

在拦截器中,我们首先获取到原始的请求对象originalRequest,然后使用newBuilder方法创建一个新的请求Builder requestBuilder。接下来,我们使用header方法添加了两个Header字段,分别是"User-Agent"和"Authorization"。最后,我们使用build方法构建了新的请求对象newRequest

最后,我们使用chain.proceed(newRequest)方法将新的请求对象传递给下一个拦截器或者发送请求。

完整示例

下面是一个完整的示例,演示了如何使用OkHttp发送带有Header的GET请求:

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "OkHttpExample";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                        Request originalRequest = chain.request();

                        // 创建新的请求Builder
                        Request.Builder requestBuilder = originalRequest.newBuilder();

                        // 添加Header
                        requestBuilder.header("User-Agent", "OkHttp Example");
                        requestBuilder.header("Authorization", "Bearer token");

                        // 构建新的请求
                        Request newRequest = requestBuilder.build();

                        // 继续处理请求
                        return chain.proceed(newRequest);
                    }
                })
                .build();

        Request request = new Request.Builder()
                .url("
                .build();

        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e(TAG, "Request failed: " + e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String responseBody = response.body().string();
                    Log.d(TAG, "Response: " + responseBody);
                } else {
                    Log.e(TAG, "Request failed: " + response.code());
                }
            }
        });
    }
}

在上面的代码中,我们首先创建了一个OkHttpClient,并添加了一个拦截器来设置Header。接下来,我们创建了一个GET请求对象,并指定了请求的URL。最后,我们使用client.newCall(request)方法创建了一个Call对象,并使用enqueue方法来异步发送请求。

当请求完成后,会回调onResponse方法或者onFailure方法,我们可以在这些方法中处理请求的响应或者错误。

总结

在本文中,我们介绍了如何使用OkHttp添加Header。通过添加拦截器,在发送请求之前修改请求的Header字段。我们还提供了详细的代码示例和清晰的逻辑解释。

使用OkHttp发送HTTP请求非常简单,而添加Header则可以使我们的请求更加灵