PHP CURL kullanarak: yerine bir dosyaya kaydederek bir çerez taklit etmek için bir yol var?

3 Cevap php

Ben session_id adında bir değişken kullanan REST API hizmetine erişmek. Bu bir çerez olarak saklanır için API çağırır ve şöyle Bunu gerçekleştirmek:

$ch = curl_init();    // initialize curl handle

        curl_setopt($ch, CURLOPT_URL, $url); //set target URL
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);// allow redirects
        curl_setopt($ch, CURLOPT_COOKIEFILE, './Cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEJAR, './Cookie.txt');
        curl_setopt($ch, CURLOPT_POST, TRUE); // set POST method
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //set headers
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, TRUE); //return the headers so we can get session id
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //prevent unverified SSL certificate error
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //prevent unverified SSL ""

        $contents = curl_exec($ch);
        curl_close($ch);

Şimdi sorun, bu çok farklı kullanıcılar tarafından çok farklı kez denilmektedir. (Çok farklı çerez dosyaları kaydedilmiş olması) Ben sadece yerine çerez dosyasına başvuran bir değişkene session_id saklamak için bir yol istiyorum. Şimdiye kadar benim tüm girişimleri hizmeti tarafından reddedilir. Herkes bir dosyaya kaydetmeden oturum kimliği ve tanımlama bilgileri saklamak için yöntemler önerebilirsiniz? Session id okuma sorun olduğunu unutmayın, bu XML döndü. Nedense gerçek oluşturulan dosyayı başvururken olmadan geri geçerek güvenlik kimlik geçmez. Bu olabilir neden olarak daha fazla bilgi de yararlı olacaktır.

3 Cevap

Çerezler isteği ile birlikte gönderilen basit bir metin başlıkları vardır. CURL doğrudan CURLOPT_COOKIE kullanarak bu belirlemenizi sağlar.

curl_setopt($ch, CURLOPT_COOKIE, 'key=value;anotherkey=anothervalue');

Göndermek için hangi bilgileri biliyorsanız, kendi cookie başlık bu şekilde inşa edebilirsiniz. Cookiejar / COOKIEFILE seçenekleri sadece tasarruf ve gönderme, ayrıştırma otomatikleştirmek. Eğer bir dosyaya yazmak istemiyorsanız, (göndermek için Cookie başlıklarını oluşturmak, alınan Cookie başlıklarını okumak) elle yapmak zorunda olacak.

Iyi bir örnek, burada var

http://sgjoomla.googlecode.com/svn/trunk/joomla/curltest.php

Nedense, çerez kısmı dışarı yorumladı ancak tüm ihtiyacınız kod hala orada olduğunu.

Temel olarak, "Set-Cookie" başlıklarını kendinizi ayrıştırmak ve bu yaparak çerez değerini kaydetmek

  curl_setopt ($ch, CURLOPT_HEADERFUNCTION, 'read_header');

Bir küresel çerez değeri koymak. Bir sonraki çağrı olarak, bu şekilde ayarlayın

  curl_setopt($ch, CURLOPT_COOKIE, "$cookieName=$cookieValue");

I tempnam benzersiz bir dosya adı oluşturmak için kullanabilirsiniz.

$ckfile = tempnam ("/tmp", "cookieMyWeb");
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);

Kıvırmak kullanmadan önce yeni bir dosya adı oluşturun.