Okhttp3:需要帮助才能使用 HeaderInterceptor
Okhttp3: Need help to use HeaderInterceptor
我想对所有请求使用全局 header。因此我实现了以下 class:
public class HeaderInterceptor {
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.method("GET", null)
.addHeader("Accept", "application/json")
.addHeader("Basic ", "abcdefghi123456789")
.build();
Response response = chain.proceed(request);
return response;
}
}
现在我想在 main() 方法中执行以下操作:
public static void main(String[] args) throws Exception {
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(MyInterceptor).build();
Request reqAllProjects = new Request.Builder()
.url("https://example.com/projects")
.build();
Response resAllProjects = httpClient.newCall(reqAllProjects).execute();
String responseData = resAllProjects.body().string();
System.out.println(responseData);
}
我现在不确定如何使用我的 HeaderInterceptor。我想我必须在这里输入它,对吗?
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(??MyInterceptor??).build();
我尝试过这样的事情:addInterceptor(HeaderInterceptor.intercept()) 但这不起作用...
有人可以帮我吗?其余的看起来还好吗?非常感谢!
你检查过这个问题了吗:
应该是这样的
.addInterceptor(新拦截器())
您创建的拦截器 class 似乎没有实现 Interceptor
接口。您需要按如下方式实现
public class HeaderInterceptor implements Interceptor {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("Accept", "application/json")
.addHeader("Basic ", "abcdefghi123456789")
.build();
Response response = chain.proceed(request);
return response;
}
}
请注意,您不应该将请求的方法和正文修改为.method("GET", null)
,除非您确实需要这样做,因为它会导致所有 HTTP客户端发出的 GET 请求为 null body 的请求。
然后在构建客户端时添加拦截器,如下所示
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new HeaderInterceptor()).build();
查看 OkHttp documentation 了解更多信息。
我想对所有请求使用全局 header。因此我实现了以下 class:
public class HeaderInterceptor {
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.method("GET", null)
.addHeader("Accept", "application/json")
.addHeader("Basic ", "abcdefghi123456789")
.build();
Response response = chain.proceed(request);
return response;
}
}
现在我想在 main() 方法中执行以下操作:
public static void main(String[] args) throws Exception {
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(MyInterceptor).build();
Request reqAllProjects = new Request.Builder()
.url("https://example.com/projects")
.build();
Response resAllProjects = httpClient.newCall(reqAllProjects).execute();
String responseData = resAllProjects.body().string();
System.out.println(responseData);
}
我现在不确定如何使用我的 HeaderInterceptor。我想我必须在这里输入它,对吗? OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(??MyInterceptor??).build(); 我尝试过这样的事情:addInterceptor(HeaderInterceptor.intercept()) 但这不起作用...
有人可以帮我吗?其余的看起来还好吗?非常感谢!
你检查过这个问题了吗:
应该是这样的 .addInterceptor(新拦截器())
您创建的拦截器 class 似乎没有实现 Interceptor
接口。您需要按如下方式实现
public class HeaderInterceptor implements Interceptor {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("Accept", "application/json")
.addHeader("Basic ", "abcdefghi123456789")
.build();
Response response = chain.proceed(request);
return response;
}
}
请注意,您不应该将请求的方法和正文修改为.method("GET", null)
,除非您确实需要这样做,因为它会导致所有 HTTP客户端发出的 GET 请求为 null body 的请求。
然后在构建客户端时添加拦截器,如下所示
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new HeaderInterceptor()).build();
查看 OkHttp documentation 了解更多信息。