|
16 | 16 | use AsyncAws\Core\Signer\Signer;
|
17 | 17 | use AsyncAws\Core\Signer\SignerV4;
|
18 | 18 | use AsyncAws\Core\Stream\StreamFactory;
|
| 19 | +use AsyncAws\Core\Stream\StringStream; |
19 | 20 | use Psr\Log\LoggerInterface;
|
20 | 21 | use Psr\Log\NullLogger;
|
21 | 22 | use Symfony\Component\HttpClient\HttpClient;
|
@@ -113,11 +114,18 @@ final protected function getResponse(string $method, $body, $headers = [], ?stri
|
113 | 114 | $request = new Request($method, $this->fillEndpoint($endpoint), $headers, $stream);
|
114 | 115 | $this->getSigner()->sign($request, $this->credentialProvider->getCredentials($this->configuration));
|
115 | 116 |
|
116 |
| - if (!$request->hasHeader('content-length') && null !== $length = $request->getBody()->length()) { |
| 117 | + $length = $request->getBody()->length(); |
| 118 | + if (null !== $length && !$request->hasHeader('content-length')) { |
117 | 119 | $request->setHeader('content-length', $length);
|
118 | 120 | }
|
119 | 121 |
|
120 |
| - return $this->httpClient->request($request->getMethod(), $request->getUrl(), ['headers' => $request->getHeaders(), 'body' => $request->getBody()]); |
| 122 | + // Some servers (like testing Docker Images) does not supports `Transfer-Encoding: chunked` requests. |
| 123 | + // The body is converted into string to prevent curl using `Transfer-Encoding: chunked` unless it really has to. |
| 124 | + if (($requestBody = $request->getBody()) instanceof StringStream) { |
| 125 | + $requestBody = $requestBody->stringify(); |
| 126 | + } |
| 127 | + |
| 128 | + return $this->httpClient->request($request->getMethod(), $request->getUrl(), ['headers' => $request->getHeaders(), 'body' => 0 === $length ? null : $requestBody]); |
121 | 129 | }
|
122 | 130 |
|
123 | 131 | /**
|
|
0 commit comments