PDA

View Full Version : [PHP] cURL, gestione cookies & co


bububu
16-01-2012, 19:19
Ciao a tutti. Sto cercando di realizzare un proxy php per Facebook veloce e funzionante come f1.chinoxy.com per "bypassare" un proxy aziendale molto carognoso (lo voglio rifare e non usare questo perchè non so di preciso dove vadano a finire il mio username e la password...)

Per fare ciò ho deciso di usare PHP e l'estensione cURL per il recupero delle pagine (monterò tutto su un webserver "visibile" e non filtrato dal proxy che mi farò da tramite tra me e FB).

Sono attualmente arenato sul login:

un pò googhelando e un pò mettendoci del mio sono arrivato a questo codice che ho provato su piattaforma Win7/Apache e che fa correttamente il login:



<?php
include ("LIB_parse.php");

$cookie_file_path = "cookie.txt";
$fp = fopen($cookie_file_path, "w");
fclose($fp);

$username = "tuausername";
$password = "tuapassword";

$post4login = "charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&version=1.0&return_session=0&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&email=".$username."&pass=".$password."";

function curl_get($url, $post = NULL)
{
global $cookie_file_path, $username, $password;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_REFERER, "https://www.facebook.com/login.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

// Ricevi cookies
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);

if ($post){ curl_setopt($ch, CURLOPT_POSTFIELDS, $post);}

$html = curl_exec($ch);

return $html;
}


$url = "https://www.facebook.com/login.php?login_attempt=1";

$a = curl_get($url, $post4login);
echo $a;

// final result $result = return_between($a, "<!DOCTYPE html>","</html>", INCL);

?>

Il problema è che nel file cookie.txt non viene scritto un tubo. San Google è venuto in mio aiuto dicendomi che su Windows devo usare i percorsi assoluti sennò PHP e cURL litigano (quando mai!) (http://www.renownedmedia.com/blog/php-curl-cookies-not-saving-on-windows/).

In effetti inserendo l'url assoluto il file viene scritto.... unico problema che non funziona più il login! Mi ci sono scervellato un pò ma non ho risolto :(

Dove sbaglio? Il mio obiettivo è creare una benedetta funzione che vada per tutte le pagine.

- quando faccio il POST di login mi salvi la reply del server con i cookie in un file senza far casino

- quando richiamo una qualsiasi altra pagina di quel dominio usi il cookie salvato per farmela vedere :D


Non so se quello che ho elaborato è il metodo più semplice per raggiungere l'agognato obiettivo (lato programmazione intendo, non ditemi che con una VPN posso risolvere perchè il proxy aziendale è una carogna) ogni altra soluzione è accetta (e sono curioso di sapere cosa sbaglio nel mio codice se possibile).

Grazie a tutti e buona pappa/serata

bububu
18-01-2012, 11:36
Up!

bububu
30-01-2012, 13:38
UP! :)