改造を使用してリクエストしています。
次のエラーが発生しました:
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);
}
そして、私はリクエストをしています:
例:
1)ログイン
@POST("/login")
Call<User> login();
2)いくつかのリクエスト:
@GET("/request")
Call<PojoPojo> getPojo();
そして、私はこのエラーが多すぎるフォローリクエストを受け取っています:21。
助けてください。
ジェイクウォートンは次のように書いています。
これは、エンドポイントを呼び出すときに20を超えるリダイレクトがある場合(RetrofitではなくOkHttpによって)スローされます。通常、これは2つのエンドポイント間のリダイレクトサイクルを示します。 ChromeとFirefoxのどちらも、この数のリダイレクト後にリクエストのロードを停止し、リクエストを失敗させます。
呼び出したいエンドポイントに正しいデータを直接渡しているかどうかを確認するには、サーバーチームまたはエンドポイントのドキュメントを参照する必要があります。レトロフィットがここで実行するアクションはありません。
そして残りのスレッドがあります: https://github.com/square/retrofit/issues/1561
私にとっての問題は、リクエストURLが_"/"
_で始まっていたことでした。
URL @GET("/request")
を@GET("request")
に置き換えます
"/"
_で終わる必要がありますAuthorization
ヘッダーを使用する場合は、代わりに値を_"Bearer " + token
_として設定する必要があるかどうかを確認しますレトロフィット2.4.0バージョンを使用:
_<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.4.0</version>
</dependency>
_
回避策として、次のものを使用できます。
new OkHttpClient.Builder() .followRedirects(FALSE) .followSslRedirects(FALSE)
okhttp3.internal.http.RetryAndFollowUpInterceptor クラスのソースコードをご覧ください。
私はOkHttpのバージョン3.12.0を使用しています。