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
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