Pregunta

Aquí está mi código para usar curl:

class cURL {
    var $headers;
    var $user_agent;
    var $compression;
    var $cookie_file;
    var $proxy;
    var $process;

    function cURL($cookies = TRUE, $cookie = 'cookies.txt', $compression = 'gzip', $proxy = '') {
        $this->headers [] = 'Connection: Keep-Alive';
        $this->headers [] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
        $this->user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)';
        $this->compression = $compression;
        $this->proxy = $proxy;      

        $this->cookies = $cookies;
        if ($this->cookies == TRUE)
            $this->cookie ( "c:/wamp/www/googlegroups/cookies/".$cookie );

        $this->process = curl_init ();
        curl_setopt ( $this->process, CURLOPT_HTTPHEADER, $this->headers );
        curl_setopt ( $this->process, CURLOPT_USERAGENT, $this->user_agent );

        if ($this->cookies == TRUE)
            curl_setopt ( $this->process, CURLOPT_COOKIEFILE, $this->cookie_file );
        if ($this->cookies == TRUE)
            curl_setopt ( $this->process, CURLOPT_COOKIEJAR, $this->cookie_file );

        curl_setopt ( $this->process, CURLOPT_ENCODING, $this->compression );
        curl_setopt ( $this->process, CURLOPT_TIMEOUT, 30 );
        if ($this->proxy)
            curl_setopt ( $this->process, CURLOPT_PROXY, $this->proxy );
        curl_setopt ( $this->process, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt ( $this->process, CURLOPT_FOLLOWLOCATION, 1 );
        curl_setopt ( $this->process, CURLOPT_SSL_VERIFYHOST, 0 );
        curl_setopt ( $this->process, CURLOPT_SSL_VERIFYPEER, 0 );
    }

    function __destruct(){
        curl_close ( $this->process );
        unlink($this->cookie_file);
    }

    function cookie($cookie_file) {
        if (file_exists ( $cookie_file )) {
            $this->cookie_file = $cookie_file;
        } else {
            if($fp = fopen ( $cookie_file, 'w' ))
            {
                fclose($fp);
            }
            else $this->error ( 'The cookie file could not be opened. Make sure this directory has the correct permissions' );
            $this->cookie_file = $cookie_file;
        }
    }
    function get($url) {
        curl_setopt ( $this->process, CURLOPT_POST, 0);
        curl_setopt ( $this->process, CURLOPT_URL, $url);
        $return = curl_exec ( $this->process );
        return $return;
    }

 }

$cc = new cURL();
echo $cc->get("http://127.0.0.1/googlegroups/testcookie.php");

Este es un tipo muy extraño de mal funcionamiento del rizo que nunca antes había experimentado. y esta es la salida de testcookie.php:

  

Las cookies NO están habilitadas en su   navegador

Aquí está lo curioso si elimina unlink ($ this- > cookie_file); desde la función de destrucción, el archivo cookie no se eliminará y la próxima vez que ejecute este script obtendrá

  

Las cookies están habilitadas en su navegador

código fuente testcookie.php:

setcookie("test","test");
if (isset (

Aquí está mi código para usar curl:

class cURL {
    var $headers;
    var $user_agent;
    var $compression;
    var $cookie_file;
    var $proxy;
    var $process;

    function cURL($cookies = TRUE, $cookie = 'cookies.txt', $compression = 'gzip', $proxy = '') {
        $this->headers [] = 'Connection: Keep-Alive';
        $this->headers [] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
        $this->user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)';
        $this->compression = $compression;
        $this->proxy = $proxy;      

        $this->cookies = $cookies;
        if ($this->cookies == TRUE)
            $this->cookie ( "c:/wamp/www/googlegroups/cookies/".$cookie );

        $this->process = curl_init ();
        curl_setopt ( $this->process, CURLOPT_HTTPHEADER, $this->headers );
        curl_setopt ( $this->process, CURLOPT_USERAGENT, $this->user_agent );

        if ($this->cookies == TRUE)
            curl_setopt ( $this->process, CURLOPT_COOKIEFILE, $this->cookie_file );
        if ($this->cookies == TRUE)
            curl_setopt ( $this->process, CURLOPT_COOKIEJAR, $this->cookie_file );

        curl_setopt ( $this->process, CURLOPT_ENCODING, $this->compression );
        curl_setopt ( $this->process, CURLOPT_TIMEOUT, 30 );
        if ($this->proxy)
            curl_setopt ( $this->process, CURLOPT_PROXY, $this->proxy );
        curl_setopt ( $this->process, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt ( $this->process, CURLOPT_FOLLOWLOCATION, 1 );
        curl_setopt ( $this->process, CURLOPT_SSL_VERIFYHOST, 0 );
        curl_setopt ( $this->process, CURLOPT_SSL_VERIFYPEER, 0 );
    }

    function __destruct(){
        curl_close ( $this->process );
        unlink($this->cookie_file);
    }

    function cookie($cookie_file) {
        if (file_exists ( $cookie_file )) {
            $this->cookie_file = $cookie_file;
        } else {
            if($fp = fopen ( $cookie_file, 'w' ))
            {
                fclose($fp);
            }
            else $this->error ( 'The cookie file could not be opened. Make sure this directory has the correct permissions' );
            $this->cookie_file = $cookie_file;
        }
    }
    function get($url) {
        curl_setopt ( $this->process, CURLOPT_POST, 0);
        curl_setopt ( $this->process, CURLOPT_URL, $url);
        $return = curl_exec ( $this->process );
        return $return;
    }

 }

$cc = new cURL();
echo $cc->get("http://127.0.0.1/googlegroups/testcookie.php");

Este es un tipo muy extraño de mal funcionamiento del rizo que nunca antes había experimentado. y esta es la salida de testcookie.php:

  

Las cookies NO están habilitadas en su   navegador

Aquí está lo curioso si elimina unlink ($ this- > cookie_file); desde la función de destrucción, el archivo cookie no se eliminará y la próxima vez que ejecute este script obtendrá

  

Las cookies están habilitadas en su navegador

código fuente testcookie.php:

<*>COOKIE['test'])) { echo "Cookies are enabled on your browser"; } else { echo "Cookies are <b>NOT</b> enabled on your browser"; }
¿Fue útil?

Solución

No veo dónde está el problema. El CURL está haciendo exactamente lo que se supone que debe hacer.

setcookie () establece la cookie en el encabezado de respuesta para el cliente. _COOKIE contiene valor en el encabezado de la solicitud. Si elimina el archivo de cookie, CURL no tiene forma de conservar el valor de cookie que configuró.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top