2011-07-20 24 views
5

CURL (PHP) ile bir süredir WordPress'te Logging ile uğraşıyordum. Sanırım her şeyi denedim, ama bir şey özledim gibi görünüyor. Giriş yaptığımda Çerezlerimi kaydetmek için CURL alamıyorum. Tuhaf olan şey, çerezleri dosyaya kaydedemesem de, her şey daha fazla ya da daha az çalışıyor, yükseltme Worpdress Plugins (şu anda üzerinde çalışıyorum). Ben wordpress için giriş yapabilirim, ve hatta otomatik bir ugprade preg_matching bağlantı ve üzerinde kıvırma ayarlayabilirsiniz - Wordpress çekirdek yükseltmeleri hiçbir sorun olmadan, ancak eklentileri söz konusu olduğunda herhangi bir nedenle - Ben sadece yapamam. Dün geceki problemin yattığını tahmin ettim, ama hiçbir şey yapmadı. Şimdi CURL'den ve FireFox'tan aldığım çerezleri karşılaştırmaya karar verdiğimde CURL'den çerez yok.CURL Çerezleri Kaydetmez (PHP)

Pekala, işte burada Seçenekler'i ayarlıyorum (yorumda bulunmuş şeylere aldırış etmeyin, her şeyi kontrol ettiğim şeyleri kontrol ettim ve yerleştirdim ...).

$cookieFile = 'cookies.txt'; 
$channel = curl_init(); 

curl_setopt_array($channel, array (
    CURLOPT_SSL_VERIFYPEER => FALSE, 
    CURLOPT_TIMEOUT => 60, 
    CURLOPT_FOLLOWLOCATION => 1, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_COOKIEFILE => $cookieFile, 
    CURLOPT_COOKIEJAR => $cookieFile, 
    CURLOPT_AUTOREFERER => true, 
    CURLOPT_POSTFIELDS => $loginPostData, 
    CURLOPT_POST => 1, 
    #CURLOPT_FRESH_CONNECT => 1 
    #CURLOPT_FAILONERROR => 1 
)); 
    # curl_setopt ($channel, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
# 
# Shorten curl_exec for our $channel 
# 
function copen($openUrl, $custom = FALSE) { 
global $channel;global $siteUrl; 
if($custom) {$siteUrl = "";} 
curl_setopt ($channel, CURLOPT_URL, $siteUrl.$openUrl); 
$result = curl_exec ($channel) or die(curl_error($channel)); 
echo "<h3> Opening: $openUrl </h3>"; 
return $result; 
} 

Bu yüzden bir arama yaptım ve çerezleri almaya çalıştı ve bu başarısız oldu:

 preg_match('/^Set-Cookie: (.*?);/mi', $result, $m); 
    echo(parse_url($m[1])); 

Ben de file_get_contents() ile $ cookieFile yankılanan çalıştı - boş. Dosyayı yaklaşık 15 kez kontrol ettim - bu bir 777 yazılabilir dosyadır. Buna file_put_contents() ile yazmayı denedim ve başarılı oldum, bu yüzden dosya konumunda ve/veya izinlerde hata var. Belli ki bir şeyi özlüyorum, sadece göremiyorum.

Saygılarımızla :)

cevap

1

Tamam, ben de çözümü buldum. Bir HTML içeriğinden preg_match() ile taranacak bağlantıyı eşleştirdikten sonra, önce bağlantıdan çıkmanız gerekir (henüz bilinmeyen bir sebepten dolayı). Eğer çerez dosyasına mutlak yolunu kullanıyorsanız bazı Diğerleri için

0

Eh ben geçen yıl bir web bot yaptık ve bu ı kullanılan kod: i çok iyi senaryo% 100 çalışır unutmayın . Tabii ki giriş yaptığım ve eğer giriş yapıp yapmadığımı kontrol eden bir fonksiyon var();

function init($username,$password,$mainurl){ 
    global $curl; 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_HEADER, 0); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($curl, CURLOPT_COOKIEFILE, "$username"); 
    curl_setopt($curl, CURLOPT_COOKIEJAR, "$username"); 

    login($curl,$username,$password,$mainurl); 
} 
function login($curl,$username,$password,$mainurl){ 
    $logindata="some_login_data"; 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($curl, CURLOPT_URL, "SITE LOGIN PAGE URL"); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $logindata); 
    return curl_exec($curl); 
} 
+0

Buraya giriş yaptıktan sonra cookie/oturumu canlı tutabiliyor muydunuz? Anlamı - Yeniden giriş yapmadan giriş yaptıktan sonra sayfayı tarayabilir misiniz? – Norris

+0

evet, çerez tarayıcıya kaydedilir. Ve başka bir girişe ihtiyacınız yok (sadece tarayıcıyı veya çerezleri kapatırsanız) – TreantBG

+0

Tamam, sanırım sahip olduğum sorunun ne olduğunu biliyorum! - Denediğim şey, PHP'nin kendisini CURL yapmaktır. Hala bunun için bir düzeltme bilmiyorum ... – Norris

6

kontrol ($ maç) html_entity_decode: Biz ile bunu!

'C: \ wamp \ www \ cookie.txt' yerine

:

'cookie.txt'

curl_setopt($curl, CURLOPT_COOKIEFILE, 'C:\wamp\www\cookie.txt'); 
curl_setopt($curl, CURLOPT_COOKIEJAR, 'C:\wamp\www\cookie.txt'); 
1

expierenced aynı sorunu ve curl_close çağrı ile çözülür() sonunda. Eksikse, çerezler kaydedilmez.