【发布时间】:2021-09-28 12:25:08
【问题描述】:
我需要有关 Java 改造请求的帮助:
场景 1:我添加了一个具有少量静态标头的拦截器。
场景 2:在请求 API 时,同时发送少量动态标头。
当请求完成时,我会检查如下的请求标头。
response.raw().request().headers()
我可以看到静态标题但看不到动态标题。
下面是Interceptor设置静态头的代码:
public class AuthInterceptor implements Interceptor {
public AuthInterceptor() {
}
protected String authtoken;
public AuthInterceptor(String authtoken) {
defaultHeader();
this.authtoken = authtoken;
}
public void setAuthtoken(String authtoken) {
this.authtoken = authtoken;
}
private Headers.Builder defaultHeader() {
final String xUserAgent = Util.SDK_NAME + "/" + Util.SDK_VERSION;
return new Headers.Builder()
.add("X-User-Agent", xUserAgent)
.add("User-Agent", Util.defaultUserAgent())
.add("Content-Type", "application/json");
}
public Headers.Builder addHeader(@NotNull String key, @NotNull String value) {
defaultHeader().add(key, value);
return defaultHeader();
}
@NotNull
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder request = chain.request().newBuilder()
.headers(defaultHeader().build());
if (this.authtoken != null) {
request.addHeader("authtoken", this.authtoken);
}
return chain.proceed(request.build());
}
}
并发送如下动态标头。
@POST("stacks")
Call<ResponseBody> create(
@Header("organization_uid") String orgUid,
@Body RequestBody body);
【问题讨论】:
-
你能贴出你用来设置标题的代码吗?
-
在问题中添加了详细信息(代码)。请验证
-
语法看起来应该可以工作。您是否在 null 检查之前打印出 authToken,以确保它按预期设置?
-
是的! authtoken 与所有其他静态标头一起工作正常。问题在于我发送的动态标头未附加到请求我可以通过以下方式查看请求标头:response.raw().request().headers()
标签: http header retrofit2 httpclient interceptor