Iniciar sesión con cURL

  • Autor Autor Usuario eliminado 44716
  • Fecha de inicio Fecha de inicio
U

Usuario eliminado 44716

Hola a todos, me gustaría saber como puedo llegar a hacer un inicio de sesión con cURL ya que lo necesito hacer para el admin de Prestashop y no consigo hacerlo, no veo ninguna guía decente si alguien pudiera decirme los curl_setopt que debo poner se lo agradecería mucho. Esto es lo que había puesto:

Insertar CODE, HTML o PHP:
	$input = array();
	$input['email'] = "";
	$input['passwd'] = "";

	$handler = curl_init(''); 
	
	curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($handler, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($handler, CURLOPT_COOKIESESSION, true);
	curl_setopt($handler, CURLOPT_POST, true);
	curl_setopt($handler, CURLOPT_POSTFIELDS, $input);

	$response = curl_exec($handler);
	curl_close($handler);

Gracias por leerme y saludos!
 
Faltan las cookies:
PHP:
		curl_setopt($handler, CURLOPT_COOKIEFILE, "cokkie.txt");
		curl_setopt($handler, CURLOPT_COOKIEJAR, "cokkie.txt");

Tmb podrias indicar el referer, el user agent... te recomiendo usar charles proxy y ver todos los datos que se envian
 
mira este codigo lo hise yo para hacer un login a una cierta pagina lo que hise fue averiguar las variables post detras de la user y la pass como la miras? solo abre el codigo fuente y miras la form la variables de esa web en los name="" eran usuari y contrasenia y la que lo enviaba era accion logueo
PHP:
$cookie_file = "/tmp/".time();
	   $useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"; 
    $c = curl_init("http://xxxxxx/registro"); 

    curl_setopt($c, CURLOPT_USERAGENT, $useragent); 
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($c, CURLOPT_POST,true);
        curl_setopt($c, CURLOPT_POSTFIELDS, "usuari=cccccc&contrasenya=111111&accion=logueo");
	
curl_setopt($c, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_file);
		 
    $load1 = curl_exec($c); 
   curl_close ($c);
 

por eso te digo... usa charles proxy y mira que envia el navegador... o algun plugin para ver que envia el navegador...
 
Hola, siguiendo un post que está más o menos bien sobre como iniciar sesión me queda así:

PHP:
	$input = array("email" => "", "passwd" => "");
	$url = ""

	foreach($input as $name=>$value){
		$elements[] = "{$name}=".urlencode($value);
	}

	$handler = curl_init(); 

	curl_setopt($handler, CURLOPT_URL, $url)
	curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($handler, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($handler, CURLOPT_COOKIESESSION, true);
	curl_setopt($handler, CURLOPT_POST, true);
	curl_setopt($handler, CURLOPT_FRESH_CONNECT, true);
	curl_setopt($handler, CURLOPT_POSTFIELDS, $elements);
	curl_setopt($handler, CURLOPT_COOKIEJAR,"cookie.txt");
	curl_setopt($handler, CURLOPT_COOKIEFILE,"cookie.txt");

	$response = curl_exec($handler);
	curl_close($handler);

	print $response;

Pero me manda este error al lanzarlo:

Parse error: syntax error, unexpected 'foreach' (T_FOREACH) in C:\xampp\htdocs\login.php on line 7

Muchas gracias por atenderme.


EDITO:


El error ese era por un punto y coma ahora me da este:

Parse error: syntax error, unexpected 'curl_setopt' (T_STRING) in C:\xampp\htdocs\login.php on line 14

Refiriendose al 2º curl_setopt

EDITO 2:

El otro setopt tampoco tenía ";" xD, ahora simplemente no hace login igual que al principio.

---------- Post agregado el 29-jun-2013 hora: 00:27 ----------

Mi problema es que no puedo incluir el useragent (CREO), ya que este script se ejecuta con un cron job entonces cual sería el useragent (?)
 
Última edición por un moderador:

No influye en nada que se ejecute como cron job, ya que el uagent lo estás especificando tú, no se toma automáticamente. Yo uso este:
PHP:
curl_setopt($handler, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0');
Si quieres puedes poner el tuyo. Para averiguarlo pon un echo $_SERVER['HTTP_USER_AGENT']; o tómalo de aquí: Your user agent » Información básica
Saludos
 
Buenas, paso a dejar una recomendación; utilicen curl_setopt_array(), al tratarse de un Cronjob necesitarán optimizar (ésto hace que se llame a una sóla función con una sola variable, un arreglo bidimensional, en vez de todo ese choclo innecesario)

Insertar CODE, HTML o PHP:
$handler = curl_init(); 
curl_setopt_array($handler, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_COOKIESESSION => true,
CURLOPT_POST => true,
CURLOPT_FRESH_CONNECT => true,
CURLOPT_POSTFIELDS => $elements,
CURLOPT_COOKIEJAR => "cookie.txt",
CURLOPT_COOKIEFILE => "cookie.txt"));
$response = curl_exec($handler);

les dejo el link a la función en php.net

Un saludo.