2012-01-15 15 views
6

Sto usando questo ....PHP CURL sembra ignorare cookie jar/file

function cURL($url, $header=NULL, $p=NULL) 
    { 

     $ch = curl_init(); 

     curl_setopt($ch, CURLOPT_HEADER, true); 
     curl_setopt($ch, CURLOPT_NOBODY, true); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"); 
     curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/TestCookies"); 


     if ($p) { 
      curl_setopt($ch, CURLOPT_POST, 1); 
      curl_setopt($ch, CURLOPT_POSTFIELDS, $p); 
     } 
     $result = curl_exec($ch); 

     if ($result) { 
      return $result; 
     } else { 
      return curl_error($ch); 
     } 
     curl_close($ch); 
    } 

E sto facendo una chiamata del genere ...

 $Headers = array(
       "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*\/*;q=0.5", 
       "Accept-Language: en-gb,en;q=0.5", 
       "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7"); 


     $a = $this->cURL("https://www.mysite.com/",$Headers, null); 

I' d aspettarsi che questo riceva un cookie e scriverlo sul file /tmp/TestCookies.

Il sito restituisce definitivamente le intestazioni Set-Cookie - Posso vederle se scarico $a, tuttavia, il file in questione non viene mai creato.

Nel caso si tratti di un problema di autorizzazioni, l'ho creato con touch e chmod 777 'd it - Il file ora esiste ma è vuoto.

Cosa sto sbagliando?

+2

'_COOKIEFILE' viene letto da, e solo' _COOKIEJAR' è stato scritto. – mario

+0

tipo di menzionato qui: http://stackoverflow.com/a/1861824/345031 – mario

+0

Grazie per le informazioni - se si desidera pubblicarlo come risposta, accetterò. – Basic

risposta

11

Il curl constants sono divisi in

  • CURL_COOKIEFILE come fonte cookies.txt quali è leggere da
  • e CURL_COOKIEJAR come il datastore cioè scritto torna a

È è necessario fornire _COOKIEFILE con una stringa vuota per abilitarlo IIRC, ma _COOKIEJAR se li vuoi memorizzati. Normalmente imposta entrambe le opzioni sullo stesso nome.

+0

Grazie Mario - Nel mio caso, ho provato a fornire uno o l'altro, ma mai entrambi. – Basic

+3

Da allora è stato trasformato in 'CURLOPT_COOKIEFILE' e' CURLOPT_COOKIEJAR'. –