Hace ya varios meses que posteé una forma de logarse a una cuenta de Google usando cURL. Yo particularmente lo usaba para obtener ciertos datos de Google Analytics y procesarlos. Pero hace algunos días este script dejó misteriosamente de funcionar y, tras una ardua búsqueda en Internet, descubrí que el problema estaba en un nuevo parámetro que hay que enviar por POST a la hora de logarse. El parámetro se llama GALX y el problema está en que su valor no es estático sino que se genera dinámicamente cada vez que se accede a la página de login.

Pero “a grandes males, grandes remedios”. Así que la solución está en extraer el valor de GALX (que se almacena en un input type hidden) del formulario de login y enviarlo como parametro a través de cURL. Como una imagen valen más que mil palabras os dejo el script tal y como debería quedar para logarse sin problemas

<?
//authentication

$churl ="https://www.google.com/accounts/ServiceLoginBoxAuth";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.25 Safari/532.0");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_URL, $churl);
$response=curl_exec ($ch);

$pattern = '/name="GALX"\s+value="(.+)"/';
preg_match($pattern, $response, $matches);
$GALX=$matches[1];

$churl ="https://www.google.com/accounts/ServiceLoginBoxAuth";
$username=urlencode('usuario@dominio.com'); //por lo general será usuario@gmail.com
$password="tupassword";
$postdata="GALX=$GALX&Email=$username&Passwd=$password";

curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_URL, $churl);
curl_exec ($ch);

//end authentication
?>
Share