改造中的静态 headers 和动态 headers 问题
Static headers and dynamic headers issue in retrofit
我需要有关 Java 改造请求的帮助:
场景 1:我添加了一个几乎没有静态的拦截器 headers。
场景 2:在请求 API 时,也发送少量动态 headers。
请求完成后,我检查请求 headers,如下所示。
response.raw().request().headers()
在哪里我可以看到静态 headers 但看不到动态 headers。
下面是拦截器设置静态的代码headers:
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());
}
}
并发送动态 headers 如下所示。
@POST("stacks")
Call<ResponseBody> create(
@Header("organization_uid") String orgUid,
@Body RequestBody body);
在我看来问题出在您使用:
Request.Builder request = chain.request().newBuilder()
.headers(defaultHeader().build());
如果您查看 'headers' 方法的文档,它指出:删除此构建器上的所有 headers 并添加 {@code headers} .
只需将每个 header 添加到 addHeader 就可以了。
我需要有关 Java 改造请求的帮助:
场景 1:我添加了一个几乎没有静态的拦截器 headers。
场景 2:在请求 API 时,也发送少量动态 headers。
请求完成后,我检查请求 headers,如下所示。
response.raw().request().headers()
在哪里我可以看到静态 headers 但看不到动态 headers。
下面是拦截器设置静态的代码headers:
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());
}
}
并发送动态 headers 如下所示。
@POST("stacks")
Call<ResponseBody> create(
@Header("organization_uid") String orgUid,
@Body RequestBody body);
在我看来问题出在您使用:
Request.Builder request = chain.request().newBuilder()
.headers(defaultHeader().build());
如果您查看 'headers' 方法的文档,它指出:删除此构建器上的所有 headers 并添加 {@code headers} .
只需将每个 header 添加到 addHeader 就可以了。