Saltar al contenido

¿Cómo hacer que file_get_contents() funcione con HTTPS?

Luego de consultar expertos en este tema, programadores de diversas áreas y maestros dimos con la solución a la cuestión y la dejamos plasmada en este post.

Solución:

Para permitir el envoltorio https:

  • la php_openssl la extensión debe existir y estar habilitada
  • allow_url_fopen debe establecerse en on

En el archivo php.ini debe agregar estas líneas si no existe:

extension=php_openssl.dll

allow_url_fopen = On

Pruebe el siguiente script para ver si hay un contenedor https disponible para sus scripts php.

$w = stream_get_wrappers();
echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no', "n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "n";
echo 'wrappers: ', var_export($w);

la salida debe ser algo como

openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(11) 
  [...]

Pruebe lo siguiente.

function getSslPage($url) 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;

Nota: Esto deshabilita la verificación SSL, lo que significa se pierde la seguridad que ofrece HTTPS. Solo use este código para pruebas/desarrollo local, nunca en internet u otras redes públicas. Si este código funciona, significa que el certificado SSL no es de confianza o no se puede verificar, lo que debe solucionar como un problema aparte.

No se te olvide comunicar este post si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *