Mar*_*tel 16 android cookiemanager retrofit okhttp
我正在使用改造来提出请求.
我有以下错误:
java.net.ProtocolException:后续请求太多:21
代码如下:
private OkHttpClient httpClient;
private CookieManager cookieManager;
public <S> S createCookieService(Class<S> serviceClass) {
httpClient.interceptors().clear();
httpClient.setCookieHandler(cookieManager);
Retrofit.Builder builder = new Retrofit
.Builder()
.client(httpClient)
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.client(httpClient).build();
return retrofit.create(serviceClass);
}
Run Code Online (Sandbox Code Playgroud)
然后我提出要求:
例:
1)登录
@POST("/login")
Call<User> login();
Run Code Online (Sandbox Code Playgroud)
2)一些要求:
@GET("/request")
Call<PojoPojo> getPojo();
Run Code Online (Sandbox Code Playgroud)
我收到这个错误的后续请求太多:21.
请帮忙.
Mar*_*tel 10
杰克沃顿写道:
当调用端点时有超过20个重定向时,这会被抛出(通过OkHttp,而不是Retrofit).通常这表示两个端点之间的重定向循环.在此重定向后,Chrome和Firefox也将停止加载请求,并使请求失败.
您需要咨询服务器团队或端点文档,以确保将正确的数据直接传递到要调用的端点.Retrofit没有采取任何行动.
其余的线程在那里:https: //github.com/square/retrofit/issues/1561
小智 7
当令牌的标头密钥已经存在并且没有用新令牌替换它时,也会发生这种情况,如下所示:
response.request.newBuilder()
.header("Authorization", token)
.build()
Run Code Online (Sandbox Code Playgroud)
您添加新的令牌(单个键可以在标头中包含多个值),很多问题中常见的是像这样添加令牌:
response.request.newBuilder()
.addHeader("Authorization", token)
.build()
Run Code Online (Sandbox Code Playgroud)
这将导致请求再次失败(401),并且您将陷入循环。
TL;DR:设置新令牌的正确方法是:
response.request.newBuilder()
.header("Authorization", token)
.build()
Run Code Online (Sandbox Code Playgroud)
小智 5
作为解决方法,可以使用:
new OkHttpClient.Builder()
.followRedirects(false)
.followSslRedirects(false)
Run Code Online (Sandbox Code Playgroud)
很高兴看一下okhttp3.internal.http.RetryAndFollowUpInterceptor类源代码。
我使用的是OkHttp 3.12.0版本。
| 归档时间: |
|
| 查看次数: |
16385 次 |
| 最近记录: |