No se puede habilitar la cookie en php curl
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";
}
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ó.