tags:

views:

424

answers:

1

Here is my code to use 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");

This is a very strange type of curl's malfunctioning that I've never experienced before. and this is the output of the testcookie.php :

Cookies are NOT enabled on your browser

Here is the funny thing if you remove unlink($this->cookie_file); from the destruction function the cookie file will not get deleted and next time you run this script you will get

Cookies are enabled on your browser

testcookie.php source code:

setcookie("test","test");
if (isset ($_COOKIE['test']))
{
    echo "Cookies are enabled on your browser";
}
else
{
    echo "Cookies are <b>NOT</b> enabled on your browser";
}
+3  A: 

I don't see where is the problem. The CURL is doing exactly what it supposes to do.

setcookie() sets cookie in response header to the client. _COOKIE contains value in request header. If you remove cookie file, CURL has no way to persist the cookie value you set.

ZZ Coder
wow! setcookie() sets cookie in response header to the client. _COOKIE contains value in request header.! Great point there! I didn't see that coming! Thanks
EBAGHAKI