ejemplo - php 7 mysqli
Cómo resolver manualmente hosts en conexiones HTTP(S) en PHP (2)
De acuerdo con el registro de cambios , se agregó soporte para CURLOPT_RESOLVE
en 5.5.0.
Tenga en cuenta que, en el momento de la redacción, ni siquiera está documentado, pero de acuerdo con este informe de errores , toma una matriz como argumento.
Curl tiene una función para especificar manualmente qué IP resolver un host. Por ejemplo:
curl https://www.google.com --resolve "www.google.com:443:173.194.72.112"
Esto es especialmente útil cuando se usa HTTPS. Si solo fuera una solicitud HTTP, podría haber logrado lo mismo al especificar la dirección IP directamente y agregar un encabezado de host. Pero en HTTPS eso rompería la conexión ya que el host del certificado SSL se compararía con la dirección IP y no con el encabezado del host.
Mi pregunta es, ¿cómo puedo hacer lo mismo en PHP?
Aunque la respuesta de @ deceze es correcta, un ejemplo en vivo podría ser útil. Necesitaba CURLOPT_RESOLVE
porque estaba intentando conectarme directamente a la dirección IP con un encabezado adicional de Host: www.example.com
, pero como el servidor usaba SNI, no funcionó.
CURLOPT_RESOLVE
para resolver mi problema. Este código me permite conectarme al servidor SNI en una dirección IP de mi elección:
$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);