Skip to content

Commit 4d59d3e

Browse files
authored
Fix Host and false stream (#290)
1 parent 3a58f1e commit 4d59d3e

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

src/AbstractApi.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use AsyncAws\Core\Signer\Signer;
1717
use AsyncAws\Core\Signer\SignerV4;
1818
use AsyncAws\Core\Stream\StreamFactory;
19+
use AsyncAws\Core\Stream\StringStream;
1920
use Psr\Log\LoggerInterface;
2021
use Psr\Log\NullLogger;
2122
use Symfony\Component\HttpClient\HttpClient;
@@ -113,11 +114,18 @@ final protected function getResponse(string $method, $body, $headers = [], ?stri
113114
$request = new Request($method, $this->fillEndpoint($endpoint), $headers, $stream);
114115
$this->getSigner()->sign($request, $this->credentialProvider->getCredentials($this->configuration));
115116

116-
if (!$request->hasHeader('content-length') && null !== $length = $request->getBody()->length()) {
117+
$length = $request->getBody()->length();
118+
if (null !== $length && !$request->hasHeader('content-length')) {
117119
$request->setHeader('content-length', $length);
118120
}
119121

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]);
121129
}
122130

123131
/**

src/Signer/SignerV4.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public function sign(Request $request, ?Credentials $credentials): void
6868
$request->setHeader('x-amz-security-token', $sessionToken);
6969
}
7070

71-
$request->setHeader('host', $parsedUrl['host']);
71+
$request->setHeader('host', $parsedUrl['host'] . (isset($parsedUrl['port']) ? ':' . $parsedUrl['port'] : ''));
7272
$request->setHeader('x-amz-date', $amzDate = gmdate('Ymd\THis\Z'));
7373
$credentialScope = [substr($amzDate, 0, 8), $this->region, $this->scopeName, 'aws4_request'];
7474

0 commit comments

Comments
 (0)