Java httpClient потоковый запрос - PullRequest
2 голосов
/ 27 января 2020

Я пытаюсь воспроизвести некоторое поведение, предоставляемое моим клиентским приложением, с помощью java http-клиента.

Я пытаюсь отправить (поток) двоичные данные с httpClient на сервер через запрос PUT. Таким образом, тип контента application/octet-stream. Я должен отправить неизвестное количество поступающих данных.

Во-первых, я использовал Apache HttpClient, потому что он может легко обрабатывать дайджест-проверку подлинности (это требование). Для этого я использую ContentProducer, который разрешает запись непосредственно в OutputStream.

Ниже приведен пример:

   HttpPut sendDataReq= new HttpPut(
                HTTP_URI);
   ContentProducer myContentProducer = new ContentProducer() {
     @Override
     public void writeTo(OutputStream out) throws IOException
     {
       out.write("ContentProducer rocks!".getBytes());
       out.write(("Time requested: " + new Date()).getBytes());
     }
   };
   HttpEntity myEntity = new EntityTemplate(myContentProducer);
   sendDataReq.setEntity(myEntity );
   HttpResponse response= httpClient.execute(sendDataReq);

Я ожидаю от этого куска кода для потокового запроса (И НЕ ОТВЕТА ) от клиента к серверу.

Используя Wireshark, я могу видеть мой запрос PUT, но он отправляется по протоколу TCP, а затем ничего. Когда я пытаюсь прослушать, используя мое интерфейсное веб-приложение, я вижу, что запрос PUT отправляется по протоколу HTTP с длиной содержимого 0, затем данные отправляются байтами байтами (пакет некоторого количества байтов) по протоколу HTTP с журналом информация: ПРОДОЛЖЕНИЕ.

Кроме того, я попытался с httpUrlConnection, но нет реализации digestAuthentication. Итак, я перестаю им пользоваться.

Есть ли намеки на то, что плохо в моем ContentProducer и как это сделать? 1022 *? Используете другие java HTTP-клиенты? Я могу предоставить в Wireshark журнал того, что ожидается и что у меня есть.

...