向显式指定的 IP 发出请求,但使用显式指定的主机名进行 SSL 验证?

问题描述 投票:0回答:2

有没有办法同时告诉

GuzzleHttp\Client

  • 将请求发送到明确指定的 IP,并且
  • 为了 SSL 验证而“假装”请求是针对特定主机名发出的?

出于超出此问题范围的原因,我不能简单地传递“https://some.host.name/uri”作为请求 URL。我必须传递 https:///uri" 并设置

Host
标头。然而,当我这样做时,Guzzle 出于 SSL 主机和对等验证的目的而忽略
Host
标头,并尝试使用数字 IP 地址,但失败了。

如何获得我想要的™?

php https guzzle
2个回答
3
投票

尽管评论中谈论了所有“XY 问题”,但这却是 100% 纯粹的“Y 问题”,这里是解决方案

$client = new GuzzleHttp\Client([
    'curl' => [CURLOPT_RESOLVE => ['fakedomain.dev:80:127.0.0.1']],
]);

0
投票

您还可以使用请求中的主机标头来执行此操作,而不是设置

curl
选项。我永远无法让它与客户端上的主机标头一起使用。我们使用这种方法是因为我们需要使用它的地方传递了一个 GuzzleHttp
client
并且不需要创建它。

    $client = new Client([
            // Connect to local host
            'base_uri' => "https://127.0.0.1/",
            'timeout' => 2.0,
            'verify' => false, //we're connecting to localhost,
            // Documentation seems says you can do this, however it doesn't seem to work
//            'headers' => [
//                    'Host' => $host
//            ]
        ]);


        $response = $client->request('GET', '/some/url', [
            'headers' => [
                'Host' => 'fakedomain.dev'
            ]
        ]);
© www.soinside.com 2019 - 2024. All rights reserved.