Как вручную разрешать хосты в HTTP (S) соединениях в PHP

Curl имеет функцию для ручного указания IP-адреса для разрешения хоста. Например:

curl https://www.google.com --resolve "www.google.com:443:173.194.72.112" 

Это особенно полезно при использовании HTTPS. Если бы это был просто HTTP-запрос, я мог бы достичь этого, указав непосредственно IP-адрес и добавив заголовок узла. Но в HTTPS, который нарушит соединение, поскольку хост SSL-сертификата будет сравниваться с IP-адресом, а не с заголовком хоста.

Мой вопрос: как я могу сделать то же самое в PHP?

В соответствии с изменением , поддержка CURLOPT_RESOLVE была добавлена ​​в 5.5.0.
Обратите внимание, что на момент написания документа еще не документировано, но в соответствии с этим сообщением об ошибке он принимает массив как аргумент.

Хотя ответ @ deceze верен, живой пример может оказаться полезным. Мне нужен CURLOPT_RESOLVE потому что я пытался напрямую подключиться к IP-адресу с дополнительным заголовком Host: www.example.com , но поскольку сервер использовал SNI, это не сработало.

Я использовал CURLOPT_RESOLVE для решения моей проблемы. Этот код позволяет мне подключаться к серверу SNI по IP-адресу по моему выбору:

 $resolve = array(sprintf( "%s:%d:%s", $hostname, $port, $host_ip )); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RESOLVE, $resolve); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch);