Skip to content

Commit 89de248

Browse files
committed
Make sure we rewind stream if we can.
This will fix #46
1 parent 99d27b4 commit 89de248

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

src/Formatter/FullHttpMessageFormatter.php

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Http\Message\Formatter;
44

55
use Http\Message\Formatter;
6+
use Psr\Http\Message\MessageInterface;
67
use Psr\Http\Message\RequestInterface;
78
use Psr\Http\Message\ResponseInterface;
89

@@ -44,9 +45,7 @@ public function formatRequest(RequestInterface $request)
4445
$message .= $name.': '.implode(', ', $values)."\n";
4546
}
4647

47-
$message .= "\n".mb_substr($request->getBody()->__toString(), 0, $this->maxBodyLength);
48-
49-
return $message;
48+
return $this->addBody($request, $message);
5049
}
5150

5251
/**
@@ -65,7 +64,27 @@ public function formatResponse(ResponseInterface $response)
6564
$message .= $name.': '.implode(', ', $values)."\n";
6665
}
6766

68-
$message .= "\n".mb_substr($response->getBody()->__toString(), 0, $this->maxBodyLength);
67+
return $this->addBody($response, $message);
68+
}
69+
70+
/**
71+
* Add the message body if the stream is seekable.
72+
*
73+
* @param MessageInterface $request
74+
* @param string $message
75+
*
76+
* @return string
77+
*/
78+
private function addBody(MessageInterface $request, $message)
79+
{
80+
$stream = $request->getBody();
81+
if (!$stream->isSeekable() || $this->maxBodyLength === 0) {
82+
// Do not read the stream
83+
$message .= "\n";
84+
} else {
85+
$message .= "\n".mb_substr($stream->__toString(), 0, $this->maxBodyLength);
86+
$stream->rewind();
87+
}
6988

7089
return $message;
7190
}

0 commit comments

Comments
 (0)