Foros del Web » Programando para Internet » PHP »

Problemas curl logueado en unos apartados si y en otros no

Estas en el tema de Problemas curl logueado en unos apartados si y en otros no en el foro de PHP en Foros del Web. Buenas! 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 ...
  #1 (permalink)  
Antiguo 30/01/2017, 17:37
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 16 años
Puntos: 8
Problemas curl logueado en unos apartados si y en otros no

Buenas!

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->curlCURLOPT_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->curlCURLOPT_HEADERfalse);
        
curl_setopt($this->curlCURLOPT_COOKIEFILE,$this->cookie);
        
curl_setopt($this->curlCURLOPT_HTTPHEADER, array("Accept-Language: es-es,en"));
        
curl_setopt($this->curlCURLOPT_COOKIEJAR$this->cookie);
        
curl_setopt($this->curlCURLOPT_SSL_VERIFYPEERtrue);
        
curl_setopt($this->curlCURLOPT_SSL_VERIFYHOST2);
        
// curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
        
curl_setopt($this->curlCURLOPT_RETURNTRANSFER,true);
        
curl_setopt($this->curlCURLOPT_CONNECTTIMEOUT5);
        
curl_setopt($this->curlCURLOPT_TIMEOUT60);
        
curl_setopt($this->curlCURLOPT_AUTOREFERERTRUE);
        
curl_setopt($this->curlCURLOPT_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->curlCURLOPT_URL$url);
        
curl_setopt($this->curlCURLOPT_POST,false);
        
curl_setopt($this->curlCURLOPT_HEADER$follow);
        
curl_setopt($this->curlCURLOPT_REFERER'');
        
curl_setopt($this->curlCURLOPT_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->curlCURLOPT_URL$url);
        
curl_setopt($this->curlCURLOPT_POST,true);
        
curl_setopt($this->curlCURLOPT_REFERER'');
        
curl_setopt($this->curlCURLOPT_HEADER$header OR $follow);
        
curl_setopt($this->curlCURLOPT_POSTFIELDS$elements);
        
curl_setopt($this->curlCURLOPT_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->curlCURLOPT_URL$url);
        
curl_setopt($this->curlCURLOPT_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);
    
}

Datos con los que estoy realizando las pruebas



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(); 
A ver si alguien le ha pasado algo parecido... o tiene idea de que es lo que puedo estar haciendo mal...
Muchas gracias por tu tiempo.
Un saludo

Etiquetas: curl
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:07.