kıvırmak çerez başarı yaratmak değil

3 Cevap php

Hi I'm using cUrl(PHP) to post a login request and store response in cookie file. In my second request I'm passing cookie in header and post data to verify it.

Sayı cookie dosyası ikinci isteği başarısızlıkla ilk başarılı istek sonuçlarında oluşturulan olmasıdır. Ben yanlış yapıyorum nerede Lütfen beni öneririz.

$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);

3 Cevap

i aynı sorun windows localhost sunucusu çalıştırmak için kullanabilirsiniz vardı

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

Orada da bir curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); eklemeyi deneyin.

Ayrıca, her istek için taze bir kıvrılma örneğini başlatmak için gerek yoktur. Birden istekleri için aynı örneği yeniden kullanabilirsiniz. Sadece (.. vb olsun, url, postFields) uygun CURLOPT ayarlamak her zaman ve kıvırmak içten şeyleri sıralamak olacaktır.

Cookijar seçeneği eklenir bu işlevi deneyin:

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;
}

Ayrıca Set-Cookie için döndürülen veri başlığını okuma deneyebilirsiniz: Somekey

ve daha sonra curlopt kullanımda

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

Teşekkürler