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
?>
Tags: CURL, GALX, Google, login, PHP
This entry was posted on Tuesday, October 13th, 2009 at 16:24 and is filed under Informática. You can follow any responses to this entry through the RSS 2.0 feed. RSS 2.0. You can leave a response, or trackback from your own site.
October 13th, 2009 at 16:31
[...] http://www.irishsquare.com/blog/2009/10/13/como-logarse-a-una-cuenta-de-google-con-php-y-curl-ii/ [...]
April 21st, 2011 at 02:17
Hola, estoy muy interesado en este tema y quería comunicarte que ya no funciona este script. Google ha hecho algo para que no se pueda coger el parametro GALX correcto, de todas las maneras que he probado, tanto CURL como HTTPCLIENT como fopen, en todos te da un GALX incorrecto, no se como se las han ingeniado.
Quizas soy yo que no se lo suficiente pero creo que no. Si quieres mirartelo y comentamos me sería de gran ayuda.
Muchas gracias y un saluido
April 21st, 2011 at 08:48
Hola Víctor, justo en este momento estoy usando un script que utiliza este código y me funciona sin problemas. Si hace un printo de de $GALX que te sale?
April 26th, 2011 at 09:06
Hola Jesús, disculpas por tardar, he estado fuera de viaje.
Pues al hacer un print del código GALX, me sale un código GALX pero no es el correcto. A primera vista parece un código GALX como cualquier otro, pero al intentar loguearse, no funciona.
En tu script por ejemplo, me devuelve otra vez a la pantalla de login, sin mas.
En el CURL igual.
En el fopen, me sale que no tengo activadas las cookies, cosa que es mentira y ademas en todos los navegadores.
Ya te digo, al hacer print es un código galx pero al ejecutarlo nada.
Lo mejor es que el mismo script, al coger un codigo galx directamente del código fuente de la página de google y insertarlo en el código (sin hacer fopen o CURL, sinó directamente) sí que funciona.
Me da la sensación que Google detecta si lees la página en alguno de estos sistemas y te dan un código GALX falso, es mi opinión y no se como resolverlo.
Si tu tienes un script que funciona te agradecería que lo comentaras plis. Yo si quieres puedo enseñarte mi código para que veas todos estos ejemplos.
un saludo!
April 26th, 2011 at 09:08
Disulpa, cuando digo que tengo activadas las cookies, me he equivocado, queria decir que me sale un mensaje que NO tengo activadas las cookies.
April 26th, 2011 at 12:10
Ten en cuenta que si usas fopen o curl da lo mismo tu navegador, ya que para Google tu navegador es Curl, aunque ejecutes el script en Explorer o Firefox.
Si cuelgas el código en algún sitio puedo echarle un vistazo y comentarte si veo algún error
May 11th, 2011 at 17:20
Disculpa la pregunta, pero una vez te has autenticado… a que URL/Location: deberíamos apuntar?
Es decir, una vez haces el curl_exec ($ch);
no deberíamos hacer un header(‘Location: …. ‘);
Gracias
May 11th, 2011 at 17:39
Hola Javier. Como ya comenté antes, tienes que ver a cURL como si fuera un navegador más, vamos, como si fuera un firefox. Es decir, cURL es el que se loga en tu cuenta de Google, no el navegador que uses para correr el script.
Por lo tanto, si tu haces un header location a la URL de la aplicación de Google que quieras usar, es tu navegador el que lo hace, el cual, en principio no está logado, ya que te logaste desde cURL.
May 11th, 2011 at 17:42
Hola Jesús,
Entonces cómo logras hacer el AutoLogin en tu cuenta de Gmail? es decir que entres en el inbox de tu Gmail.
Perdona por la pregunta, igual es obvio pero no veo cómo hacerlo.
Antes se podía con haciendo el setcookie de la GXAS_SEC pero esto ha dejado de funcionar, sabes cómo se podría solucionar?
Gracias,
May 16th, 2011 at 17:02
Hola buenos dias al que creo la web ( http://www.irishsquare.com ) bueno me gusto mucho y me gusto algo en partil que es este tema pero veo que es de hace años pero igual nose si me podria ayudar en loque es el ( GALX ) osea me explico claramente hay puso un codigo bueno nose si hay otro codigo actual que aya creado para leer el ( GALX ) de google porque sgeun entiendo cada vez que uno entra sea a una cuenta gmail o a eso se genera un ( GALX ) aleatorio y bueno como podria hacer que un php lea el codigo osea el numero de ( GALX ) que guardo la maquina??
bueno ante todo gracias..
May 16th, 2011 at 17:13
@javier despues de haberte logado con el código que hay en este post, tienes que acceder acto seguido a gmail usando cURL otra vez. El código de arriba es solo para logarte, después ya podrás acceder a cualquiera de las aplicaciones de google (analytics, gmail, etc).
@jair, el código que hay en el post es justamente para eso, en la primera parte extraes el código GALX, y en la segunda te logas pasando dicho código.
May 16th, 2011 at 17:27
osea Jesus lo que me tratras de decir es que el codigo este segun yo entiendo:
Me cacharia el Codigo ( GALX ) y de por si donde yo ponga $GALX le leeria el codigo verdad ?? pues lo unico que busco es poder leer el codigo GALX y este codigo seria para logearme:
$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);
Bueno nose si estoy bien como me explicaste ??
May 16th, 2011 at 17:28
Mild disculpas creo que no salio el primer codigo que yo entendia que era para cachar el codigo GALX segun yo es este espero que salga:
$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];
May 16th, 2011 at 17:30
En efecto Jair
May 16th, 2011 at 17:44
Que raro Jesus mira lo que yo ise fue poner el codigo que lee el ( GALX de la web te hago un ejemplo:
Aqui abri PHP
Aqui tu codigo que pusiste y como yo entendi
Luego Aqui cerre PHP
Luego queria que el codigo que Cacho vaia a un Input y puse esto
Supuse que me leeria pero al cargar me la web sale el mismo codigo con $GALX y luego supuse fue xk cerre el PHP lo inclui y me sale error mi pregunta es ( Como logro que tu codigo que lee el GALX sea leido con que copdigo hago que sea leido asta el Input ??
<< como hago que el codigo sea pasado asi ese Imput ??
Muchas gracias por contestar mis preguntas
May 16th, 2011 at 17:45
Disculpa por repetir el comentario solo que no salio el Input que puse
————————
Que raro Jesus mira lo que yo ise fue poner el codigo que lee el ( GALX de la web te hago un ejemplo:
Aqui abri PHP
Aqui tu codigo que pusiste y como yo entendi
Luego Aqui cerre PHP
Luego queria que el codigo que Cacho vaia a un Input y puse esto
input type=”hidden” name=”GALX” value=”$GALX”
Supuse que me leeria pero al cargar me la web sale el mismo codigo con $GALX y luego supuse fue xk cerre el PHP lo inclui y me sale error mi pregunta es ( Como logro que tu codigo que lee el GALX sea leido con que copdigo hago que sea leido asta el Input ??
input type=”hidden” name=”GALX” value=”$GALX” /
como hago que el codigo sea pasado asi ese Imput ??
Muchas gracias por contestar mis preguntas
May 16th, 2011 at 17:50
Como ya expliqué un poco más arriba, todo lo tienes que hacer con cURL, porque es cURL el que se loga. Si tu pillas el código GALX con cURL pero después usas tu navegador de siempre para acceder a la página, el código GALX va a ser diferente, porque para google tú te estás accediendo con otro navegador.
En resumen, esto no sirve para logarte y después ir navegando por las aplicaciones de Google con tu navegador de siempre. Esto sirve para logarte con cURL y seguir “navegando” con cURL.
En tu ejemplo, el código GALX lo tendrías que enviar usando el código que puse yo:
$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);
May 16th, 2011 at 18:46
Bueno Jesus no entedi bien lo de cURL desde que me dijiste busq informacion que era cURL, pero de que se puede uno logear y usar las aplicacion de google en su buscador sin logearte vasicamente en el mismo buscador si se puede yo lo logre yo pero el unico problema como vez es el de el GALX bueno ya buscare luego estoy tratando de ver eso igual muchas gracias
September 20th, 2011 at 16:31
hola!
Desde siempre he usado tu script para entrar en google analytics via curl.
Desde hace un par de dias ya no me es posible.
Google Analytics busca la cookie y no existe. Logro recuperrar el GALX y enviarlo por post, pero ahora buscan la cookie.
Alguna idea de como solucionar esto?
muchas graicas
October 28th, 2011 at 12:20
no sirve!