2011-07-20 23 views
5

Ho lottato con la registrazione in Wordpress per un po 'ora con CURL (PHP). Penso di aver provato di tutto, ma sembra che mi sia sfuggito qualcosa. Non riesco a ottenere CURL per salvare i miei cookie quando accedo. La cosa strana, è che anche se non riesco a salvare i cookie su file, tutto funziona ancora più o meno, ad eccezione dell'aggiornamento dei plug-in Worpdress (è quello a cui sto lavorando al momento). Posso accedere a wordpress, e posso persino impostare un ugprade automatico preg_matching del link e curling su di esso - gli aggiornamenti core di Wordpress senza problemi, ma per qualche motivo quando si tratta di plugin - non riesco proprio a farlo. Ho avuto un sacco di ipotesi la scorsa notte, dove si trova il problema, ma niente ha fatto. Ora, quando ho deciso di confrontare i cookie che ricevo da CURL e in FireFox, risulta che non ci sono cookie da CURL.CURL non salva i cookie (PHP)

Ok, quindi qui ho impostato le opzioni (non importa le cose commentate, ho controllato tutto commentando le cose e inserendole ...).

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

così ho fatto una ricerca, e ha cercato di ottenere i cookie, e non è riuscito con questo:

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

Ho provato anche facendo eco al $ cookieFile con file_get_contents() - vuote. Ho controllato il file circa 15 volte - è un file scrivibile 777. Ho provato a scriverci con file_put_contents() e ci sono riuscito, quindi c'è un errore nel percorso del file e/o nelle autorizzazioni. Mi manca ovviamente qualcosa, non riesco a vederlo.

migliori saluti :)

risposta

1

Okay, quindi ho trovato la soluzione. Dopo aver trovato il link per eseguire la scansione con preg_match() da un contenuto HTML, è necessario prima eseguire l'escape del collegamento (per un motivo sconosciuto ancora a me). Lo facciamo con: html_entity_decode ($ match)

0

Beh ho fatto un bot web l'anno scorso e che è il codice che ho usato: mi ricordo molto bene che lo script funziona al 100%. Ovviamente ho una funzione che controlla se sono loggato e se non lo sono, quindi login();

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

Sei riuscito a mantenere il cookie/sessione dal vivo dopo aver effettuato l'accesso con questo? Significato che: potresti eseguire la scansione di una pagina dopo aver effettuato l'accesso, senza eseguire nuovamente la registrazione? – Norris

+0

sì il cookie viene salvato nel browser. E non hai bisogno di un altro login (solo se chiudi il browser oi cookie scadono) – TreantBG

+0

Ok, allora penso di sapere qual è il problema che sto avendo! - Quello che sto tentando è di rendere PHP stesso CURL La pagina, senza aprirla nel mio browser! Ancora non conosco una correzione per questo ... – Norris

6

Per alcuni altri verificare se si utilizza il assoluto percorso al file cookie!

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

anziché:

'cookie.txt'

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

Expierenced stesso problema e risolto con chiamata curl_close() alla fine. Se manca, i cookie non vengono salvati.