Java.io.IOException: неожиданный конец потока при подключении?

Вызов одной из наших внутренних веб-служб, похоже, дает следующую ошибку:

java.io.IOException: unexpected end of stream on Connection{webservicessandbox.xxx.com:443, proxy=DIRECT@ hostAddress=174.143.185.13 cipherSuite=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA protocol=http/1.1} (recycle count=0)

Из того, что я видел в другом месте, это указывается как проблема сервера, но мы не наблюдаем этой проблемы, когда WS вызывается в браузере или в IOS. Я использовал как OkHTTP, так и ручную реализацию HTTPUrlConnection, и, похоже, это не имело никакого значения. У кого-нибудь есть какие-либо идеи?

OKHttp:
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .addHeader("Authorization", "Bearer " + apiToken)
                    .addHeader("content-type", "application/json")
                    .url(uri)
                    .build();
HTTPURLConnection:
            URL myURL = new URL(uri);
            HttpsURLConnection myConnection = (HttpsURLConnection) myURL.openConnection();
            myConnection.setConnectTimeout(TIMEOUT_MILLISEC);
            myConnection.setDoOutput(false);
            myConnection.setRequestMethod("GET");
            myConnection.setRequestProperty("Authorization", "Bearer " + apiToken);
            myConnection.setRequestProperty("content-type", "application/json");
            int respCode = myConnection.getResponseCode();

Вы используете какой-то прокси?

Thalis Vilela 09.10.2018 21:54

Ожидает ли удаленный сервер двусторонний ssl (запрашивает сертификат клиента)?

Dzmitry Prakapenka 31.10.2018 11:09

Насколько я могу судить, это может быть проблема, применимая только к моей эмуляции Android. Когда я отключил эмуляцию и переключился на физическое устройство, у меня больше не возникло проблем с возникновением этой ошибки. Я до сих пор не понимаю, почему это перестало работать, если раньше я мог нормально использовать эмулятор. Возможно, проблема с обновлением эмулятора в какой-то момент?

Benjamin S 01.11.2018 20:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
11
3
30 319
3

Ответы 3

Эта ошибка TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 связана с сервером. Возможная причина: сервер выключен.

Оцените ответ, но нет, я могу постоянно вызывать службы с других устройств.

Benjamin S 01.11.2018 20:50

это особенность устройства9?

aanshu 02.11.2018 01:20

Это не ошибка, это набор шифров TLS.

user207421 26.08.2019 10:37

И клиент, и сервер должны закрыть соединение по завершении.

В построителе запросов OkHttp добавьте эту строку: .header("Connection", "close").

Также проверьте вкладку сети в инспекторе браузера, чтобы узнать, какие заголовки отправляет браузер. Сопоставьте эти заголовки в своем коде, и он должен работать.

Пожалуйста, попробуйте возможные решения (на мой взгляд) ниже:

1- Попробуйте использовать retryOnConnectionFailure(true), как показано ниже:

OkHttpClient client = new OkHttpClient.Builder()
    .retryOnConnectionFailure(true)
    .build();

2- Попробуйте добавить: request.addHeader("Connection","close") (в большинстве случаев это решение относительно ответа Картика.)

Request request = new Request.Builder()
                    .addHeader("Authorization", "Bearer " + apiToken)
                    .addHeader("content-type", "application/json")
                    .addHeader("Connection","close")
                    .url(uri)
                    .build();

3- Увеличьте время отклика сервера (установите как можно большее) и повторите попытку.

См. Также: OkHTTP Websocket: неожиданный конец пара при подключении

Другие вопросы по теме