PluginProbe
DecaLog / 4.4.0
DecaLog v4.4.0
3.0.2 3.1.0 3.10.0 3.2.0 3.3.0 3.4.0 3.4.1 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.6.3 3.7.0 3.7.1 3.8.0 3.9.0 3.9.1 4.0.0 4.1.0 4.2.0 4.3.0 4.3.1 4.4.0 4.5.0 All 75 releases
decalog / includes / libraries / http / client-common / Plugin / ContentLengthPlugin.php

ContentLengthPlugin.php in DecaLog 4.4.0, at includes/libraries/http/client-common/Plugin/ContentLengthPlugin.php

40 lines 1.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Http\Client\Common\Plugin;
6
7 use Http\Client\Common\Plugin;
8 use Http\Message\Encoding\ChunkStream;
9 use Http\Promise\Promise;
10 use Psr\Http\Message\RequestInterface;
11
12 /**
13 * Allow to set the correct content length header on the request or to transfer it as a chunk if not possible.
14 *
15 * @author Joel Wurtz <joel.wurtz@gmail.com>
16 */
17 final class ContentLengthPlugin implements Plugin
18 {
19 /**
20 * {@inheritdoc}
21 */
22 public function handleRequest(RequestInterface $request, callable $next, callable $first): Promise
23 {
24 if (!$request->hasHeader('Content-Length')) {
25 $stream = $request->getBody();
26
27 // Cannot determine the size so we use a chunk stream
28 if (null === $stream->getSize()) {
29 $stream = new ChunkStream($stream);
30 $request = $request->withBody($stream);
31 $request = $request->withAddedHeader('Transfer-Encoding', 'chunked');
32 } else {
33 $request = $request->withHeader('Content-Length', (string) $stream->getSize());
34 }
35 }
36
37 return $next($request);
38 }
39 }
40