2010-03-29 7 views
3

J'utilise cUrl (PHP) pour publier une demande de connexion et stocker la réponse dans un fichier cookie. Dans ma deuxième demande, je passe le cookie dans l'en-tête et publie des données pour le vérifier.cookie curl ne pas créer en cas de succès

Le problème est que le fichier cookie n'est pas créé dans la première requête réussie entraîne l'échec de la deuxième demande. S'il vous plaît me suggérer où je me trompe.

$cookiefile="/var/www/html/dimdim/cook.txt"; 
$url_log="http://my.dimdim.com/api/auth/login"; 
$p_log='request={"account":"bin6k","password":"password","group":"all"}'; 
$url_ver="http://my.dimdim.com/api/auth/verify"; 
$p_ver='request={"account":"bin6k","password":"password","group":"all"}'; 

$ch = curl_init(); 
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); 

curl_setopt($ch, CURLOPT_URL,$url_log); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $p_log); 

ob_start();  // prevent any output 
$retval=curl_exec ($ch); // execute the curl command 
ob_end_clean(); // stop preventing output 
curl_close ($ch); 
//print_r($retval); 
unset($ch); 


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); 
curl_setopt($ch, CURLOPT_URL,$url_ver); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $p_log); 

$buf2 = curl_exec ($ch); 

curl_close ($ch); 

echo "<PRE>".htmlentities($buf2); 

Répondre

0

Essayez d'ajouter un curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); là-dedans aussi.

De même, il n'est pas nécessaire de démarrer une nouvelle instance curl pour chaque requête. Vous pouvez réutiliser la même instance pour plusieurs demandes. Réglez juste le CURLOPT approprié (url, postfields, get, etc ...) à chaque fois et curl va trier les choses en interne.

0

Essayez cette fonction l'option cookijar est ajouté:

function execute($toLoad) { 

    if (!preg_match('/^http/', $toLoad)) { 
     $toLoad = 'http://'.$toLoad; 
    } 
    $cookiefile = APP_PATH.'tmp/cookie.txt'; 
    $data = array();  
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10); 
    curl_setopt($ch, CURLOPT_TIMEOUT,10); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20091216 Fedora/3.5.6-1.fc11 Firefox/3.5.6 GTB6"); 
    curl_setopt($ch, CURLOPT_URL, $toLoad); // The page to download 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_REFERER, 'http://somesite.com/'); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);  

    $data['data'] = curl_exec($ch); 
    $data['status'] = curl_getinfo($ch); 

    //$this->out(curl_error($ch)); 
    //$this->out(curl_getinfo($ch));  
    //$this->out(''); 
    //$this->out($data); 
    //$this->out(''); 

    curl_close($ch); 

    return $data; 
} 

vous pouvez également essayer de lire l'en-tête des données renvoyées pour Set-Cookie: SOMEKEY

puis dans l'utilisation de curlopt

if ($header) { 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Cookie:'.$header)); 
} 

merci

2

j'ai eu le même problème l'utiliser pour runnin g dans windows localhost server

curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookies.txt"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "/cookies.txt");