ccc

CURL: autentificación básica

$url = "https://otroservidor.com/api/v3/loquesea";

$username = "xxx";
$password = "xxxx";

$headers = array(
    'Content-Type: application/json',
    'Authorization: Basic '. base64_encode("$username:$password")
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, false);
$result = curl_exec($ch);
curl_close($ch);
print_r($result);


Autentificación básica y cómo recibe los datos el lado del servidor para chequear que el user y el pw es el correcto:
$username = "uno";
$password = "dos";
$headers = array(
    'Content-Type: application/json',
    'Authorization: Basic '. base64_encode("$username:$password")
);
$url = "https://www.midominio.com/curl/api2.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, false);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

Y en api2.php:
echo $_SERVER['PHP_AUTH_USER']."<br>";
echo $_SERVER['PHP_AUTH_PW']."<br>";


Otra forma de hacerlo sin $headers:
$url = "https://www.midominio.com/curl/api2.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, '111:222');
curl_setopt($ch, CURLOPT_POST, false);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

Y en api2.php:
echo $_SERVER['PHP_AUTH_USER']."<br>";
echo $_SERVER['PHP_AUTH_PW']."<br>";


OJO: Algunos servidores tienen capado que puedan recibir el PHP_AUTH_USER y el PHP_AUTH_PW.

Ejemplo general con autentificación y mandando datos por post:
$username = "111";
$password = "222";
$headers = array(
    'Content-Type: application/json',
    'Authorization: Basic '. base64_encode("$username:$password")
);

$parametros = '{
"nombre": "Pepito",
"apellidos": "Pérez García",
"edad": "27",
"ciudad": "Madrid",
"email": "pepitoperez@gmail.com"
}';

$url = "https://www.midominio.com/curl/api2.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $parametros);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

En api2.php:
header("Content-Type:application/json");
if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))) {
if (($_SERVER['PHP_AUTH_USER'] == "111") && ($_SERVER['PHP_AUTH_PW'] == "222")) {
$data = json_decode(file_get_contents('php://input'), true);
echo "<h1>Datos recibidos</h1>";
print_r($data);

}
else {
echo "User o PW incorrecto";
}
}


El servidor puede tener bloqueado el acceso a determinados ficheros (por ejemplo fecha.txt) para acceder al contenido del fichero:
$username = "111";
$password = "222";
$headers = array(
    'Content-Type: application/json',
    'Authorization: Basic '. base64_encode("$username:$password")
);

$url = "https://www.midominio.com/curl/readFile.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, false);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

Y el fichero readFile.php:
header("Content-Type:application/json");
if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))) {
 if (($_SERVER['PHP_AUTH_USER'] == "111") && ($_SERVER['PHP_AUTH_PW'] == "222")) {
  echo "<h1>Fichero</h1>";
  echo file_get_contents("fecha.txt");
 }
 else {
  echo "User o PW incorrecto";
 }
}

No hay comentarios:

Publicar un comentario