有没有办法同时告诉
GuzzleHttp\Client
:
出于超出此问题范围的原因,我不能简单地传递“https://some.host.name/uri”作为请求 URL。我必须传递 https://
Host
标头。然而,当我这样做时,Guzzle 出于 SSL 主机和对等验证的目的而忽略 Host
标头,并尝试使用数字 IP 地址,但失败了。
如何获得我想要的™?
尽管评论中谈论了所有“XY 问题”,但这却是 100% 纯粹的“Y 问题”,这里是解决方案:
$client = new GuzzleHttp\Client([
'curl' => [CURLOPT_RESOLVE => ['fakedomain.dev:80:127.0.0.1']],
]);
您还可以使用请求中的主机标头来执行此操作,而不是设置
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'
]
]);