2011-07-20 18 views
5

He estado luchando con el registro en Wordpress desde hace un tiempo con CURL (PHP). Creo que lo he intentado todo, pero parece que me he perdido algo. No puedo obtener CURL para guardar mis cookies cuando inicio sesión. Lo extraño es que, aunque no puedo guardar las cookies en el archivo, todo funciona más o menos, excepto la actualización de Plugins de Worpdress (que es en lo que estoy trabajando actualmente). Puedo iniciar sesión en wordpress, e incluso puedo establecer un ugprade automático preg_matching el enlace y curling en él - actualizaciones principales de Wordpress sin problemas, pero por alguna razón cuando se trata de complementos - simplemente no puedo hacerlo. Anoche tuve MUCHAS adivinanzas donde radica el problema, pero nada sirvió. Ahora, cuando decidí comparar las cookies que obtuve de CURL y FireFox, resulta que no hay cookies de CURL.CURL no guarda las cookies (PHP)

Bien, así que aquí configuré las Opciones (no me molestan las cosas comentadas, he estado revisando todo comentando cosas y poniéndolas ...).

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

por lo que hice una búsqueda, y trataron de obtener las cookies, y no pudo con esto:

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

También probé haciendo eco de la $ cookieFile con file_get_contents() - vacías. Verifiqué el archivo unas 15 veces, es un archivo que se puede escribir en 777. Intenté escribir con file_put_contents() y lo logré, por lo que hay un error en la ubicación del archivo y/o permisos. Obviamente me falta algo, simplemente no puedo verlo.

Saludos :)

Respuesta

1

Bien, entonces encontré la solución. Después de hacer coincidir el enlace para rastrear con preg_match() desde un contenido HTML, primero debe escapar del enlace (por una razón desconocida para mí). Hacemos esto con: html_entity_decode ($ match)

0

Bueno, yo he hecho un web bot año pasado y que es el código que he utilizado: Recuerdo muy bien que el guión funciona al 100%. Por supuesto que tengo una función que comprueba si estoy conectado y si no soy entonces 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

¿Pudo mantener la cookie/sesión en vivo después de iniciar sesión con esto? Lo que significa que, ¿podría rastrear una página después de iniciar sesión, sin volver a iniciar sesión? – Norris

+0

sí, la cookie se guarda en el navegador. Y no necesita otro inicio de sesión (solo si cierra el navegador o las cookies caducan) – TreantBG

+0

Bien, entonces creo que sé cuál es el problema que estoy teniendo. - Lo que intento es hacer que el propio PHP CURL ¡La página, sin abrirla en mi navegador! Todavía no sé una solución para esto ... – Norris

6

Para otros, compruebe si está utilizando la ruta absoluta en el archivo cookie.

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

en lugar de:

'cookie.txt'

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

expierenced mismo problema y lo resolvió con llamar curl_close() al final. Si falta, las cookies no se guardan.