J'utilise retrofit pour faire des demandes.
J'ai l'erreur suivante:
Java.net.ProtocolException: Trop de demandes de suivi: 21
Le code est comme ci-dessous:
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);
}
Et puis je fais des demandes:
exemple:
1) connexion
@POST("/login")
Call<User> login();
2) une demande:
@GET("/request")
Call<PojoPojo> getPojo();
Et je reçois cette erreur trop de demandes de suivi: 21.
Veuillez aider.
Jake Wharton a écrit:
Cela est levé (par OkHttp, pas Retrofit) lorsqu'il y a plus de 20 redirections lors de l'appel d'un point de terminaison. Cela indique généralement un cycle de redirection entre deux points de terminaison. Les deux Chrome et Firefox arrêteront également de charger la demande après ce nombre de redirections et échoueront la demande.
Vous devez consulter votre équipe de serveurs ou la documentation du point de terminaison pour vous assurer de transmettre les données correctes directement au point de terminaison que vous souhaitez appeler. Aucune action que Retrofit ne peut entreprendre ici.
Et le reste du fil est là: https://github.com/square/retrofit/issues/1561
Pour moi, le problème était: l'URL de la demande commençait par "/"
.
Remplacez l'url @GET("/request")
par @GET("request")
"/"
Authorization
, vérifiez si vous devez définir la valeur comme "Bearer " + token
à la placeen utilisant la version retrofit 2.4.0:
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.4.0</version>
</dependency>
Comme solution de contournement, il est possible d'utiliser:
new OkHttpClient.Builder() .followRedirects(FALSE) .followSslRedirects(FALSE)
Agréable de jeter un oeil à okhttp3.internal.http.RetryAndFollowUpInterceptor code source de la classe.
J'utilise la version 3.12.0 d'OkHttp.