web-dev-qa-db-ja.com

改造-フォローアップリクエストが多すぎます:21

改造を使用してリクエストしています。

次のエラーが発生しました:

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。

助けてください。

19
Marcin Bortel

ジェイクウォートンは次のように書いています。

これは、エンドポイントを呼び出すときに20を超えるリダイレクトがある場合(RetrofitではなくOkHttpによって)スローされます。通常、これは2つのエンドポイント間のリダイレクトサイクルを示します。 ChromeとFirefoxのどちらも、この数のリダイレクト後にリクエストのロードを停止し、リクエストを失敗させます。

呼び出したいエンドポイントに正しいデータを直接渡しているかどうかを確認するには、サーバーチームまたはエンドポイントのドキュメントを参照する必要があります。レトロフィットがここで実行するアクションはありません。

そして残りのスレッドがあります: https://github.com/square/retrofit/issues/1561

9
Marcin Bortel

私にとっての問題は、リクエストURLが_"/"_で始まっていたことでした。
URL @GET("/request")@GET("request")に置き換えます

  • また、APIのベースURLは_"/"_で終わる必要があります
  • Authorizationヘッダーを使用する場合は、代わりに値を_"Bearer " + token_として設定する必要があるかどうかを確認します

レトロフィット2.4.0バージョンを使用:

_<dependency>
    <groupId>com.squareup.retrofit2</groupId>
    <artifactId>retrofit</artifactId>
    <version>2.4.0</version>
</dependency>
_
2
Mihai Morcov

回避策として、次のものを使用できます。

new OkHttpClient.Builder() .followRedirects(FALSE) .followSslRedirects(FALSE)

okhttp3.internal.http.RetryAndFollowUpInterceptor クラスのソースコードをご覧ください。

私はOkHttpのバージョン3.12.0を使用しています。

1
Edson Prestes