protected function sendEntity(StreamInterface $stream, HttpRequest $request, $compress) { if (!$request->hasEntity()) { $stream->write("Content-Length: 0\r\n\r\n"); return; } $buffer = new StringStream(); try { if ($compress) { $body = new DeflateOutputStream($buffer, DeflateOutputStream::GZIP); $body->setCloseCascade(false); } else { $body = $buffer; } $request->getEntity()->send($body); $body->close(); $stream->write(sprintf("Content-Length: %u\r\n\r\n", $buffer->tell())); $buffer->rewind(); Stream::pipe($buffer, $stream); } finally { $buffer->close(); } }