PluginProbe
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more / 2.6.1
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more v2.6.1
3.7.2 3.7.1 3.7.0 3.6.0 3.6.1 3.5.2 trunk 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.6.0 2.6.1 All 73 releases
stockpack / vendor / guzzlehttp / guzzle / src / PrepareBodyMiddleware.php

PrepareBodyMiddleware.php in StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more 2.6.1, at vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php

112 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace GuzzleHttp;
3
4 use GuzzleHttp\Promise\PromiseInterface;
5 use GuzzleHttp\Psr7;
6 use Psr\Http\Message\RequestInterface;
7
8 /**
9 * Prepares requests that contain a body, adding the Content-Length,
10 * Content-Type, and Expect headers.
11 */
12 class PrepareBodyMiddleware
13 {
14 /** @var callable */
15 private $nextHandler;
16
17 /**
18 * @param callable $nextHandler Next handler to invoke.
19 */
20 public function __construct(callable $nextHandler)
21 {
22 $this->nextHandler = $nextHandler;
23 }
24
25 /**
26 * @param RequestInterface $request
27 * @param array $options
28 *
29 * @return PromiseInterface
30 */
31 public function __invoke(RequestInterface $request, array $options)
32 {
33 $fn = $this->nextHandler;
34
35 // Don't do anything if the request has no body.
36 if ($request->getBody()->getSize() === 0) {
37 return $fn($request, $options);
38 }
39
40 $modify = [];
41
42 // Add a default content-type if possible.
43 if (!$request->hasHeader('Content-Type')) {
44 if ($uri = $request->getBody()->getMetadata('uri')) {
45 if ($type = Psr7\mimetype_from_filename($uri)) {
46 $modify['set_headers']['Content-Type'] = $type;
47 }
48 }
49 }
50
51 // Add a default content-length or transfer-encoding header.
52 if (!$request->hasHeader('Content-Length')
53 && !$request->hasHeader('Transfer-Encoding')
54 ) {
55 $size = $request->getBody()->getSize();
56 if ($size !== null) {
57 $modify['set_headers']['Content-Length'] = $size;
58 } else {
59 $modify['set_headers']['Transfer-Encoding'] = 'chunked';
60 }
61 }
62
63 // Add the expect header if needed.
64 $this->addExpectHeader($request, $options, $modify);
65
66 return $fn(Psr7\modify_request($request, $modify), $options);
67 }
68
69 /**
70 * Add expect header
71 *
72 * @return void
73 */
74 private function addExpectHeader(
75 RequestInterface $request,
76 array $options,
77 array &$modify
78 ) {
79 // Determine if the Expect header should be used
80 if ($request->hasHeader('Expect')) {
81 return;
82 }
83
84 $expect = isset($options['expect']) ? $options['expect'] : null;
85
86 // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0
87 if ($expect === false || $request->getProtocolVersion() < 1.1) {
88 return;
89 }
90
91 // The expect header is unconditionally enabled
92 if ($expect === true) {
93 $modify['set_headers']['Expect'] = '100-Continue';
94 return;
95 }
96
97 // By default, send the expect header when the payload is > 1mb
98 if ($expect === null) {
99 $expect = 1048576;
100 }
101
102 // Always add if the body cannot be rewound, the size cannot be
103 // determined, or the size is greater than the cutoff threshold
104 $body = $request->getBody();
105 $size = $body->getSize();
106
107 if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {
108 $modify['set_headers']['Expect'] = '100-Continue';
109 }
110 }
111 }
112