diff --git a/src/Handler/StreamHandler.php b/src/Handler/StreamHandler.php
index 641c58f77..543f825a2 100644
--- a/src/Handler/StreamHandler.php
+++ b/src/Handler/StreamHandler.php
@@ -381,6 +381,9 @@ private function getDefaultContext(RequestInterface $request): array
'ignore_errors' => true,
'follow_location' => 0,
],
+ 'ssl' => [
+ 'peer_name' => $request->getUri()->getHost(),
+ ],
];
$body = (string) $request->getBody();
diff --git a/tests/Handler/Network/StreamHandlerTest.php b/tests/Handler/Network/StreamHandlerTest.php
new file mode 100644
index 000000000..6c92bc860
--- /dev/null
+++ b/tests/Handler/Network/StreamHandlerTest.php
@@ -0,0 +1,71 @@
+ true,
+ ]
+ )->wait();
+
+ self::assertSame(200, $response->getStatusCode());
+ self::assertStringContainsString('
Example Domain
', (string)$response->getBody());
+ }
+
+ public function testSslRequestWorksWithForceIpResolve()
+ {
+ $handler = new StreamHandler();
+
+ $response = $handler(
+ new Request('GET', 'https://www.example.com/'),
+ [
+ RequestOptions::STREAM => true,
+ 'force_ip_resolve' => 'v4',
+ ]
+ )->wait();
+
+ self::assertSame(200, $response->getStatusCode());
+ self::assertStringContainsString('Example Domain
', (string)$response->getBody());
+ }
+
+ public function testSslRequestWorksWithForceIpResolveAfterRedirect()
+ {
+ $client = new Client(['handler' => HandlerStack::create(new StreamHandler())]);
+
+ $response = $client->send(
+ // Redirects to https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsrun.
+ new Request('GET', 'https://git.io/JvXDl'),
+ [
+ RequestOptions::STREAM => true,
+ 'force_ip_resolve' => 'v4',
+ ]
+ );
+
+ self::assertSame(200, $response->getStatusCode());
+ self::assertStringContainsString('jobsjob_idstepsrun', (string)$response->getBody());
+ }
+}