A ver si alguien me puede echar un cable...
El caso es que consigo conectar a una web por curl, lanzo una petición por POST, almaceno las cookies de sesión y todo correcto, pero en el momento en que intento moverme por la página no me mantiene logueado, pero si vuelvo a mandar una petición a la url principal si que estoy logueado.
curl_post->(url_login,$variables) //conecta sin problemas bienvenido usuario
curl_get/post-> (url_principal) //regresa url logeada
curl_get/post -> (url_otro_apartado) // no me regresa logueado
curl_get/post -> (url_principal) //me regrea url logueada
Así que algo se me escapa.... y me estoy volviendo loco. Hay que decir que esta es una web de dropshipping( creo que se llama así) en la cual un proveedor ofrece a clientes vender sus productos con tu propio nombre, y lo que pretendo es, dentro de la tienda "1234" que es el id de cliente que me ha asignado este proveedor, conectar a una cuenta de un cliente mio, para obtener unos datos que necesito especificos.
Este proveedor me proporciona una web completa donde se pueden registrar mis clientes para hacer los pedidos.
No se si estoy haciendo algo mal, o es posible que tengan algún tipo de protección que me esté interferiendo para que no pueda hacer lo que pretendo...
Estoy usando una clase que encontré por internet que funciona perfectamente :
Código PHP:
class HttpConnection {
private $curl;
private $cookie;
private $cookie_path="/cookies";
private $id;
public function __construct() {
$this->id = "1234.txt";
}
/**
* Inicializa el objeto curl con las opciones por defecto.
* Si es null se crea
* @param string $cookie a usar para la conexion
*/
public function init($cookie=null) {
if($cookie)
$this->cookie = $cookie;
else
$this->cookie = $this->cookie_path . $this->id;
$this->curl=curl_init();
curl_setopt($this->curl, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1");
curl_setopt($this->curl, CURLOPT_HEADER, false);
curl_setopt($this->curl, CURLOPT_COOKIEFILE,$this->cookie);
curl_setopt($this->curl, CURLOPT_HTTPHEADER, array("Accept-Language: es-es,en"));
curl_setopt($this->curl, CURLOPT_COOKIEJAR, $this->cookie);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, 2);
// curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($this->curl, CURLOPT_TIMEOUT, 60);
curl_setopt($this->curl, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($this->curl, CURLOPT_COOKIEFILE,$this->cookie);
}
/**
* Establece en que ruta se guardan las cookies.
* Importante: El usuario de apache debe tener acceso de lectura y escritura
* @param string $path
*/
public function setCookiePath($path){
$this->cookie_path = $path;
}
/**
* Envía una peticion GET a la URL especificada
* @param string $url
* @param bool $follow
* @return string Respuesta generada por el servidor
*/
public function get($url,$follow=false) {
$this->init();
curl_setopt($this->curl, CURLOPT_URL, $url);
curl_setopt($this->curl, CURLOPT_POST,false);
curl_setopt($this->curl, CURLOPT_HEADER, $follow);
curl_setopt($this->curl, CURLOPT_REFERER, '');
curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, $follow);
$result=curl_exec ($this->curl);
if($result === false){
echo curl_error($this->curl);
}
$this->_close();
return $result;
}
/**
* Envía una petición POST a la URL especificada
* @param string $url
* @param array $post_elements
* @param bool $follow
* @param bool $header
* @return string Respuesta generada por el servidor
*/
public function post($url,$post_elements,$follow=false,$header=false) {
$this->init();
$elements=array();
foreach ($post_elements as $name=>$value) {
$elements[] = "{$name}=".urlencode($value);
}
$elements = join("&",$elements);
curl_setopt($this->curl, CURLOPT_URL, $url);
curl_setopt($this->curl, CURLOPT_POST,true);
curl_setopt($this->curl, CURLOPT_REFERER, '');
curl_setopt($this->curl, CURLOPT_HEADER, $header OR $follow);
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $elements);
curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, $follow);
$result=curl_exec ($this->curl);
$this->_close();
return $result;
}
/**
* Descarga un fichero binario en el buffer
* @param string $url
* @return string
*/
public function getBinary($url){
$this->init();
curl_setopt($this->curl, CURLOPT_URL, $url);
curl_setopt($this->curl, CURLOPT_BINARYTRANSFER,1);
$result = curl_exec ($this->curl);
$this->_close();
return $result;
}
/**
* Cierra la conexión
*/
private function _close() {
curl_close($this->curl);
}
public function close(){
// if(file_exists($this->cookie))
// unlink($this->cookie);
}
}
Código PHP:
$postdata= array(
'o' => 'login_b2c',
'p' => '11',
's' => '1234',
'operacion' => 'PStores?s=1234&o=inicio_b2c&p=1',
'clave' => 'clave',
'usuario' => 'usuariologin'
);
$http = new HttpConnection();
$http->setCookiePath(dirname(__FILE__) ."/cookies/");
$http->init();
$pagina=$http->post("https://www.maginfiweb.com/PStores",$postdata,true); // aqui mando el login a la pagina, esta loguea correctamente y ya he inciado la sesión
var_dump(stripos($pagina, 'usuariologin')); // si encuentra "usuariologin" es que estoy logueado, SI QUE SE ENCUENTRA
$pagina=$http->get("https://www.maginfiweb.com/PStores?s=1234&o=inicio_b2c&p=1",true); //aquí estoy accediendo a la pagina principal de la tienda, estoy logueado
var_dump(stripos($pagina, 'usuariologin')); // si encuentra "usuariologin" es que estoy logueado, SI QUE SE ENCUENTRA
$pagina=$http->get("https://maginfiweb.com/PStores?s=1234&o=searchEngine_b2c&p=1&flagDest1=on&seHeadOption=dest1&elementByPage=40&flagVista=C&flagRecursiveTree=S",true); //ahora estoy cambiando de sección, esta pagina no me encuentro logueado
var_dump(stripos($pagina, 'usuariologin')); // si encuentra "usuariologin" es que estoy logueado, NO SE ENCUENTRA
$pagina=$http->get("https://www.maginfiweb.com/PStores?s=1234&o=inicio_b2c&p=1",true); //como la url anterior no me muestra logueado, vuelvo a la principal a ver si sigo logueado, y el caso es que si que estoy logueado
var_dump(stripos($pagina, 'usuariologin')); // si encuentra "usuariologin" es que estoy logueado, SI QUE SE ENCUENTRA
$http->close();
Muchas gracias por tu tiempo.
![Porras](http://static.forosdelweb.com/fdwtheme/images/smilies/porra.gif)
![Porras](http://static.forosdelweb.com/fdwtheme/images/smilies/porra.gif)
Un saludo