Модифицированный POST-запрос с базовой HTTP-аутентификацией: «Невозможно повторить потоковое тело HTTP»

Я использую Retrofit для выполнения базового запроса POST и предоставляю базовый @Body для запроса.

@POST("/rest/v1/auth/login")
LoginResponse login(@Body LoginRequest loginRequest);

Когда я создаю интерфейс для Retrofit, я предоставляю свой собственный OkHttpClient, и все, что я делаю, это добавляю свою собственную аутентификацию:

    @Provides
    @Singleton
    public Client providesClient() {
        OkHttpClient httpClient = new OkHttpClient();

        httpClient.setAuthenticator(new OkAuthenticator() {
            @Override
            public Credential authenticate(Proxy proxy, URL url, List<Challenge> challenges) throws IOException {
                return getCredential();
            }

            @Override
            public Credential authenticateProxy(Proxy proxy, URL url, List<Challenge> challenges) throws IOException {
                return getCredential();
            }
        });

        return new OkClient(httpClient);
    }

Это прекрасно работает, когда я отправляю запросы напрямую через OKHttp и другие запросы GET с модификацией, но когда я использую модификацию для выполнения запроса POST, я получаю следующую ошибку:

Caused by: java.net.HttpRetryException: Cannot retry streamed HTTP body
            at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:324)
            at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:508)
            at com.squareup.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136)
            at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:94)
            at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:49)
            at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:357)
            at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:282)
            at $Proxy3.login(Native Method)
            at com.audax.paths.job.LoginJob.onRunInBackground(LoginJob.java:41)
            at com.audax.library.job.AXJob.onRun(AXJob.java:25)
            at com.path.android.jobqueue.BaseJob.safeRun(BaseJob.java:108)
            at com.path.android.jobqueue.JobHolder.safeRun(JobHolder.java:60)
            at com.path.android.jobqueue.executor.JobConsumerExecutor$JobConsumer.run(JobConsumerExecutor.java:172)
            at java.lang.Thread.run(Thread.java:841)

Я играл с этим. Если я удаляю аутентификацию и указываю на сервер, который не требует аутентификации, то он работает нормально.

Так что я должен отправлять информацию.Получение запроса проверки подлинности.Отвечая на запрос на вызов.Попытка отправить запрос еще раз, а затем выдается ошибка.

Не уверен, как обойти это. Любая помощь будет замечательной.

Ответы на вопрос(5)

Ваш ответ на вопрос