Я пытаюсь воспроизвести некоторое поведение, предоставляемое моим клиентским приложением, с помощью 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 журнал того, что ожидается и что у меня есть.