Como hacer un login a ForoBeta con cURL (PHP)

  • Autor Autor zcriptz
  • Fecha de inicio Fecha de inicio
zcriptz

zcriptz

1
Ómicron
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Suscripción a IA
Este tutorial lo hago basado en la clase que hice para utilizar cURL con PHP y el navegador Google Chrome. (Pueden utilizarse otros)

Primero abrimos el navegador, entramos a la web que queremos hacer el login, en el caso de esta demostración lo haré con ForoBeta, y colocamos los datos del login. (Sin loguear)

n8GdN3R.png





Una vez ya listo logueamos y registraremos en network nuestra petición. (Probablemente sea la primera)
Le damos Segundo click->Copy->Copy as cURL (cmd)


hVQdABU.png



Si vemos lo copiado es lo siguiente:

Insertar CODE, HTML o PHP:
curl "https://forobeta.com/login/login" -H "authority: forobeta.com" -H "pragma: no-cache" -H "cache-control: no-cache" -H "origin: https://forobeta.com" -H "upgrade-insecure-requests: 1" -H "content-type: application/x-www-form-urlencoded" -H "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" -H "accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" -H "referer: https://forobeta.com/login/" -H "accept-encoding: gzip, deflate, br" -H "accept-language: es-ES,es;q=0.9" -H "cookie: xf_csrf=QODPP15lZSAY8YLp; _ga=GA1.2.341060090.1564710086; _gid=GA1.2.1187391859.1564710086; _gat_gtag_UA_2125042_35=1" --data "login=zcriptz^&password=ajRBX217iq^%^21^%^23^&remember=1^&_xfRedirect=^%^2F^&_xfToken=1564710088^%^2Cbfc424be0480c3efed41702333e15ca3" --compressed


Borramos las siguientes cabeceras:

Insertar CODE, HTML o PHP:
-H "cookie: DATOS"
-H "accept-encoding: gzip, deflate, br"
-H "user-agent: DATOS"
Cookies que no necesitamos ya que tenemos el archivo donde se crean.
Para que no nos devuelva el código codificado, sino van a tener que decodificarlo.
Vamos a setear el navegador en la clase..



Quedando así:
Insertar CODE, HTML o PHP:
curl "https://forobeta.com/login/login" -H "authority: forobeta.com" -H "pragma: no-cache" -H "cache-control: no-cache" -H "origin: https://forobeta.com" -H "upgrade-insecure-requests: 1" -H "content-type: application/x-www-form-urlencoded" -H "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" -H "accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" -H "referer: https://forobeta.com/login/" -H "accept-language: es-ES,es;q=0.9" --data "login=zcriptz^&password=ajRBX217iq^%^21^%^23^&remember=1^&_xfRedirect=^%^2F^&_xfToken=1564710088^%^2Cbfc424be0480c3efed41702333e15ca3" --compressed


Y si observamos en los datos enviados, hay un token llamado _xfToken, el cual tenemos que buscar en el código de fuente:

f8WdRVm.png



Entonces en resumen, para simular el logueo tenemos que entrar a ForoBeta y tomar el token para poder enviarlo en los datos del formulario.

Para tomar el token uso preg_match

Insertar CODE, HTML o PHP:
preg_match('/name="_xfToken" value="([^"]+)/i', $cURL->result, $token);


Estoy tomando lo que está luego de:
Insertar CODE, HTML o PHP:
name="_xfToken" value="

Los paréntesis son para especificar que quiero lo que hay ahí. (Se guardará en el indice 1, en el indice 0 estará todo el "pattern")

[^"]
+ Todo menos ", al llegar a las comillas dobles deja de tomar.

"Traduciéndolo" sería:
Tomar todo lo que está luego de name="_xfToken" value=" hasta "


El código quedaría así:
PHP:
<?php

require_once('cURL.php');

$cURL = new cURL('cookies.txt', $_SERVER['HTTP_USER_AGENT']);
$cURL->browse('https://forobeta.com/login/', 'https://www.google.com');

preg_match('/name="_xfToken" value="([^"]+)/i', $cURL->result, $token);

echo $cURL->cmd('curl "https://forobeta.com/login/login" -H "authority: forobeta.com" -H "pragma: no-cache" -H "cache-control: no-cache" -H "origin: https://forobeta.com" -H "upgrade-insecure-requests: 1" -H "content-type: application/x-www-form-urlencoded" -H "accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" -H "referer: https://forobeta.com/login/" -H "accept-language: es-ES,es;q=0.9" --data "login=zcriptz^&password=ajRBX217iq^&remember=1^&_xfRedirect=^%^2F^&_xfToken='.urlencode($token[1]).'" --compressed')->result;

?>

Si lo testean, devolverá el index de ForoBeta estando logueado en la cuenta que se colocó.

Utilicé el código CMD que me dio el navegador de la siguiente forma:
PHP:
$cURL->cmd('aqui el código');

Y recuerden que el resultado queda guardo en $cURL->result
(cmd tiene un "return $this", así que puede hacerse $cURL->cmd(codigo)->result)



Espero que les sirva, y se entienda, ya que lo hice rápido! jeje
 
Última edición:
muy útil la clase de cURL.
 
que interesante
 
Entiendo que es como practica, sin embargo no estoy seguro si esto esta permitido, ya que tecnicamente esto entra en la categria de bots (simular la sesion fuera de la interfaz grafica del navegador). De cualquier forma, PHP tiene una API nativa de cURL: https://www.php.net/manual/en/book.curl.php

No veo porqué no estaría permitido, no solo es para simular sesiones o hacer "bots", los usos son muchísimos.

Al principio del tema aclaro en que está basado. (Y que es en la clase que yo hice)
 
No veo porqué no estaría permitido, no solo es para simular sesiones o hacer "bots", los usos son muchísimos.

Al principio del tema aclaro en que está basado. (Y que es en la clase que yo hice)

Hola compañero,

Dices que los usos son muchísimos...
Por favor, podrías poner algunos ejemplos?
Desde ya muchas gracias.

Saludos,
Hugo
 
Hola compañero,

Dices que los usos son muchísimos...
Por favor, podrías poner algunos ejemplos?
Desde ya muchas gracias.

Saludos,
Hugo

Por ejemplo puedes hacer un forceDownload en el momento para ti mismo.

Las peticiones pueden enviarse a servidores de uno mismo, no necesariamente tienen que ser externos.
 
Ah por cierto, pueden hacerse bots con interfaz gráfica.
Que bueno verte por acá nuevamente. Adoraba los programas que llegaste a realizar cuando estaba "el viejo beta"
 
Por ejemplo puedes hacer un forceDownload en el momento para ti mismo.

Las peticiones pueden enviarse a servidores de uno mismo, no necesariamente tienen que ser externos.

Ah! Gracias por responder...
Y "forceDownload"... significa descargar algún archivo que hayan publicado por aquí?

Saludos,
Hugo
 
Aclaro nuevamente, enviar datos POST (o GET) con cURL también puede hacerse en webs de uno mismo.
 
Que tal con Facebook, haz probado?
 
Muchas gracias por la clase mas detallado imposible no sabía que se podía hacer esto.
 
Ah! Gracias por responder...
Y "forceDownload"... significa descargar algún archivo que hayan publicado por aquí?

Saludos,
Hugo

Puede ser para cualquier "archivo" (hasta HTML) y no solo ForoBeta, solo utilizo el foro de ejemplo.

La clase tiene una función llamada "forceDownload" que permite hacer esto, por ejemplo podrías hacer que comience a descargar el HTML de ForoBeta con el nombre forobeta.html

Sería así:
PHP:
<?php
require_once('cURL.php');
$cURL = new cURL('cookies.txt', $_SERVER['HTTP_USER_AGENT']);
$cURL->SETOPT['URL'] = 'https://forobeta.com';
$cURL->forceDownload('forobeta.html');
?>
 
Pero como para que podría servir eso?
 
También se utiliza para tu bot de autocalificaciones
¿Autocalificaciones?

¿Te refieres al bot que tenía para devolver calificaciones?

Decir "autocalificaciones" es decir que me califico a mi mismo.

Además no entiendo porque el mensaje de la nada, ni la forma de decirlo.
Creo que mucha gente lo usa para muchas cosas.
 
eres el 2 programador que admiro..
muy bueno gracias.
 
Atrás
Arriba