20 public function __construct(callable $nextHandler)
22 $this->nextHandler = $nextHandler;
33 $fn = $this->nextHandler;
36 if ($request->
getBody()->getSize() === 0) {
37 return $fn($request, $options);
43 if (!$request->
hasHeader(
'Content-Type')) {
44 if ($uri = $request->
getBody()->getMetadata(
'uri')) {
46 $modify[
'set_headers'][
'Content-Type'] = $type;
52 if (!$request->
hasHeader(
'Content-Length')
53 && !$request->
hasHeader(
'Transfer-Encoding')
55 $size = $request->
getBody()->getSize();
57 $modify[
'set_headers'][
'Content-Length'] = $size;
59 $modify[
'set_headers'][
'Transfer-Encoding'] =
'chunked';
64 $this->addExpectHeader($request, $options, $modify);
74 private function addExpectHeader(
75 RequestInterface $request,
80 if ($request->hasHeader(
'Expect')) {
84 $expect = isset($options[
'expect']) ? $options[
'expect'] :
null;
87 if ($expect ===
false || $request->getProtocolVersion() < 1.1) {
92 if ($expect ===
true) {
93 $modify[
'set_headers'][
'Expect'] =
'100-Continue';
98 if ($expect ===
null) {
104 $body = $request->getBody();
105 $size = $body->getSize();
107 if ($size ===
null || $size >= (
int) $expect || !$body->isSeekable()) {
108 $modify[
'set_headers'][
'Expect'] =
'100-Continue';