Cum sa te loghezi pe un site folosind CURL in PHP?
3De foarte multe ori in domeniul web suntem nevoiti sa automatizam anumite procese. Unele dintre acestea presupun extragerea si parsarea unor informatii de pe alte site-uri. O metoda foarte populara foloseste modulul CURL pentru a descarca o pagina web externa. O prima introducere in aceasta tehnica am abordat-o in urma cu ceva vreme cand am aratat cum putem descarca continutul HTML al unei pagini web. Mai tarziu am publicat un mic tutorial in care avem explicatii cuprinzatoare cu privire la folosirea modulului CURL in model multi-thread.
Problema apare atunci cand dorim sa descarcam continutul unei pagini web dar care este protejata de un sistem de autentificare (de cele mai multe bazat pe cookie-uri). In aceasta situatie trebuie sa folosim acelasi modul pentru a accesa si simula o autentificare, sa stocam cookie-urile intr-un fisier local si apoi sa le folosim in noile requesturi, simuland astfel un utilizator autentificat. Exemplul de mai jos reprezinta o rezolvare generalizata a unui sistem de autentificare bazat pe un exemplu real.
<?php //http://www.worldit.info $agent = 'Mozilla (WorldIT)'; //browserul cu care te vei loga $username = 'worldit.info'; //utilizatorul $pass = 'viziteaza-worldit.info';//parola $url = 'http://www.wit.info/index.php';//pagina pe care sunt trimise datele de autentificare $urlacc = 'http://www.wit.info/date-confidentiale.php';//pagina pe care trebuie sa o descarcam in momenntul in care suntem logati $postdata = "user_name=".$username."&user_pass=".$pass."&remember_me=y&login=Login"; //datele transmise prin post/get (pot fi modificate) $cookie = 'cookie.txt';//fisierul unde sunt stocate datele $result = curl_login($postdata,$url,$cookie,$agent,TRUE); //ne logam echo curl_access_logged($urlacc,$cookie,$agent);//accesam o pagina ca fiind logati //functia minimala pentru simularea unui sistem de autentificare & stocarea sesiunii valide function curl_login($postdata='',$url='',$cookie='',$agent='',$post=TRUE) { $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ch, CURLOPT_USERAGENT, $agent); curl_setopt ($ch, CURLOPT_TIMEOUT, 60); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt ($ch, CURLOPT_REFERER, $url); if($post) { curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt ($ch, CURLOPT_POST, 1); } $result = curl_exec ($ch); curl_close($ch); return $result; } //functia clasica pentru accesarea unei pagini folosind curl & cookies function curl_access_logged($url,$cookies,$agent) { $rand = rand(100000,400000); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $result = curl_exec ($ch); curl_close ($ch); return $result; } ?>
Modelul de mai sus reprezinta solutia pentru automatizarea unui proces de autentifcare ce are un formular de logare bazat pe 4 campuri – doua campuri ce trebuie completate si reprezinta datele de autentificare, un checkbox care spune ca dorim sa ramanem logati si un buton ce trimite datele. Pentru a afla aceste campuri puteti analiza formularul HTML aferent al sistemului de autentificare.
He-he 🙂 Old school!
Printr-o coincidenta funny, wit.info e o prostie de „site” in japoneza.
Da, asta cam asa e. Am ales wit.info pentru ca nu doream sa fie o neintelegere si sa considere cineva ca e autentificarea pentru WordPress.
Foarte interesant articolul. Multumesc!