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()); + } +}