如何让每个Http请求都自动带上token

要让每个HTTP请求都自动携带token,我们可以使用拦截器来实现。拦截器是一个可以在请求和响应之间进行干预的组件,我们可以在它的回调方法中加入我们需要的逻辑,比如带上token。下面是一个完整的攻略:

要让每个HTTP请求都自动携带token,我们可以使用拦截器来实现。拦截器是一个可以在请求和响应之间进行干预的组件,我们可以在它的回调方法中加入我们需要的逻辑,比如带上token。下面是一个完整的攻略:

步骤一:添加拦截器

首先,我们要添加一个拦截器,代码如下:

public class TokenInterceptor implements Interceptor {

    private String token;

    public TokenInterceptor(String token) {
        this.token = token;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Request.Builder builder = request.newBuilder();
        if (token != null) {
            builder.header("Authorization", "Bearer " + token);
        }
        request = builder.build();
        return chain.proceed(request);
    }
}

这个拦截器的作用是在请求的Header中添加Authorization字段,并将其值设置为token。这里我们传入一个token参数,表示需要携带的token。如果不需要携带token,可以将这个参数设置为null。

步骤二:初始化拦截器

接下来,我们要在应用程序中初始化这个拦截器,代码如下:

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new TokenInterceptor("your_token_here"))
    .build();

在这个示例中,我们使用OkHttpClient来发送HTTP请求,并在其中添加了我们的拦截器。请注意,这里需要将token替换为实际的token值。

示例一:使用OkHttp发送HTTP请求

我们来看一个使用OkHttp发送HTTP请求的示例。代码如下:

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new TokenInterceptor("your_token_here"))
    .build();

Request request = new Request.Builder()
    .url("https://example.com/api/v1/users")
    .build();

Response response = client.newCall(request).execute();

if (!response.isSuccessful()) {
    throw new IOException("Unexpected HTTP status code: " + response.code());
}

String responseBody = response.body().string();

在这个示例中,我们首先创建了一个OkHttpClient,并在其中添加了我们的拦截器。然后,我们创建了一个请求对象,指定了请求的URL,在发送请求时,拦截器会添加Authorization头部,带上我们的token。最后,我们从响应中获取到了响应内容,这个 content 就包含了 API 返回的实际数据。

示例二:使用Retrofit发送HTTP请求

我们来看一个使用Retrofit发送HTTP请求的示例。代码如下:

首先,创建一个Retrofit对象,并添加一个OkHttp客户端:

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new TokenInterceptor("your_token_here"))
    .build();

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://example.com")
    .client(client)
    .build();

在这个示例中,我们首先创建了一个OkHttpClient,并在其中添加了我们的拦截器。然后,我们创建了一个Retrofit对象,并将其与OkHttpClient关联起来。

接下来,我们定义一个接口并使用@Headers注解来指定需要添加的请求头:

public interface UserService {
    @Headers("Content-Type: application/json")
    @GET("/api/v1/users/{id}")
    Call<User> getUser(@Path("id") long id);
}

在这个示例中,我们指定了Content-Type请求头。接下来,我们就可以使用这个接口来发送HTTP请求了:

UserService userService = retrofit.create(UserService.class);
Call<User> call = userService.getUser(123);
Response<User> response = call.execute();

在这个示例中,我们首先通过Retrofit创建了一个UserService的实例,然后调用getUser方法,指定了用户ID。在发送请求时,拦截器会添加Authorization头部,带上我们的token。最后,我们从响应中获取到了响应内容,这个 content 就包含了 API 返回的实际数据。

对于Retrofit的完整使用细节请参考 Retrofit 官方文档。

本文标题为:如何让每个Http请求都自动带上token

基础教程推荐