Acceder a página protegida con htaccess mediante PHP (file_get_contents)

Ya vimos como utilizar curl para acceder a una página que se encuentra protegida por htaccess desde un script PHP, y ahora les presento una alternativa más simple: utilizar la función file_get_contents.

El único requisito que tiene es que debe estar activado el flag allow_url_fopen  en php.ini

Entonces, el bloque de código modelo que lo utiliza es el siguiente:

<?php
  $url = 'http://www.destino.com/secure/index.php';
 
  $username = 'ht_user';
  $password = 'ht_pass';
 
  //Credenciales htaccess
  $context = stream_context_create(array (
    'http' => array (
      'header' => 'Authorization: Basic ' . base64_encode("$username:$password")
    )));
 
  $data = file_get_contents($url, false, $context);
?>

En este ejemplo, obtendremos dentro la variable $data el contenido de la página index.php, para poder utilizarlo en el resto del script.

Se puede utilizar este medio para invocar otros scripts que devuelvan urls, json, etc. como si fuera un API a la aplicación.

Anuncios

Acceder a página protegida con htaccess mediante PHP (curl)

Si necesitamos acceder a una página que se encuentre protegida por credenciales htaccess desde un script PHP, podemos utilizar la extensión curl que nos provee (pueden tener problemas al intentar activarla). Para ello, les porpongo un bloque de código que la utiliza:

<?php
  $url = 'http://www.destino.com/secure/index.php';
 
  $username = 'ht_user';
  $password = 'ht_pass';
 
  $ch=curl_init();
  curl_setopt($ch,CURLOPT_URL,$url);
  
  //Credenciales htaccess
  curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

  //curl_exec devuelve el contenido obtenido en lugar de True
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
  $data = curl_exec($ch);
  
  curl_close($ch);
 
?>

En este ejemplo, obtendremos dentro la variable $data el contenido de la página index.php, para poder utilizarlo en el resto del script.

Se puede utilizar este medio para invocar otros scripts que devuelvan urls, json, etc. como si fuera un API a la aplicación.

Solucionar error de la extensión curl de PHP en Windows

Supongamos que necesitamos invocar una url a partir de nuestro código PHP. Una forma de hacerlo es mediante la extensión curl. Es posible que en Windows al intentar activarla, no logremos hacer que funcione.

Si el código que la utiliza es similar a:

<?php
  $ch=curl_init();
  curl_setopt($ch,CURLOPT_URL,'http://localhost/');
  curl_exec($ch);
  curl_close($ch);
 ?>

obtendremos el error:

Fatal error: Call to undefined function curl_init()

 

Para solucionarlo debemos primero verificar en el archivo de configuración php.ini que:

  • el directorio de extensiones (extension_dir) sea el correcto
  • la línea extension=php_curl.dll esté descomentada (sin el ; inicial)

A continuación ubicamos el directorio donde está instalado PHP y de allí copiamos los archivos:

  • libeay32.dll
  • ssleay32.dll

al directorio bin dentro de la ubicación donde se encuentra instalado de Apache.

Para finalizar reiniciamos el servicio de Apache.

 

Podemos corroborar que la extensión fue activada exitosamente a través de la información de phpinfo(), mediante un script con el código:

<?php
  phpinfo();
?>

Si volvemos a probar el código del principio veremos que funciona correctamente.