CURL
Am intrat in lucrurile cu adevarat interesante in programarea web. CURL. De ce CURL? Deoarece file_get_contents este limitat cand vine vorba de furarea preluarea continutului altor pagini web.
Deoarece nu toate site-urile web au API, CURL ne ajuta sa facem parteneriate cu site-uri web foarte avantajoase si necostisitoare pentru ei, preluarea continutului cu ajutorul CURL are astfel si un scop bun. Dar nu doar atat, CURL este folosit la scara larga pentru preluarea continutului in mod ilegal, dar nu ilegalul despre care stiti de la televizor deoarece nimeni nu ia atitudine in instanta(nici ca ar rezolva ceva astfel) doar ca este imoral sa preluezi continutul unui site fara sa ai acordul proprietarului, sper ca la sfarsitul acestui curs vei fii un programator cu idei, nu unul care stie doar sa prelueze continut in mod imoral asumandu-si venituri pe ceva ce nu-i apartine, dar aceasta este alta poveste.
Desigur, in general informatia fie ea de orice fel are minim un scop malefic, un mod de folosire imoral, dar in web acest lucru se accentueaza deoarece legile nu sunt aplicate cu strictete, iar webul are nevoie de aceasta libertate pentru a ramane in continuare un loc unde „ne putem face numarul”.
De amintit insa ca pentru a prelua continut de pe site-uri care nu permit asta(se protejeaza intr-un fel sau altul) aveti nevoie(uneori, nu intotdeauna) de un server mai libertin, unde sa nu va blocheze unele optiuni la CURL(la despregazduire de exemplu nu prea poti face mare lucru).
CURL se deosebeste de file_get_contents deoarece este mult mai complicat, cu el puteti face cereri prin metoda POST, cu el puteti vizita pagini protejate cu SSL, puteti vizita pagini si folosind cookie-uri si multe altele. Si da, cu CURL puteti face si acei boti care imita un utilizator in orice actiune doriti, de aceea PHP ramane un limbaj puternic, in care puteti face orice ati putea face in alt limbaj dar totul tine de experienta.
apt-get install php5-curl /etc/init.d/apache2 restartIar pe Windows trebuie sa deschideti fisierul php.ini ( ar trebui sa fie in C:\xampp\php\php.ini ) si sa schimbati din
;extension=php_curl.dllin
extension=php_curl.dll
1. Mod de folosire curl
<?php # ch - curl handler, folosit in mod general. $ch = curl_init(); // initializam o sesiune cURL. # Cu curl_setopt setam o optiune la sesiunea curl. # Optiunea CURLOPT_URL este pentru a specifica url-ul ce urmeaza vizitat. curl_setopt($ch, CURLOPT_URL, "http://example.iana.org/"); # Optiunea CURLOPT_HEADER este pentru a include sau nu headerele in output # valoarea 0 reprezinta sa nu includa iar valoarea 1 sa includa. curl_setopt($ch, CURLOPT_HEADER, 0); # Executam sesiunea cURL $ch si afisam in browser rezultatul curl_exec($ch); # Inchidem sesiunea cURL si eliberam resursele. curl_close($ch); ?>Output:
2. Setare optiuni cURL
bool curl_setopt ( resource $ch , int $optiune , mixed $valoare )
Explicare parametrii:
- $ch - handlerul returnat de functia curl_init
- $optiune - optiunea ce dorim sa-i setam valoarea, toate optiunile incep cu CURLOPT_ dupa care urmeaza numele optiunii
- $valoare - valoarea pentru optiunea $optiune
2.1 Cereri de tip POST
Voi folosii localhost-ul deoarece despregazduire are setat open_basedir si nu pot folosii optiunea CURLOPT_FOLLOWLOCATION pentru a urmarii headerul Location si astfel sa nu mai primim erori e tip 30x.
Cod curl.php:
<?php # fisier: /curl.php $ch = curl_init(); // initializam o sesiune cURL. # Optiunea CURLOPT_URL este pentru a specifica url-ul ce urmeaza vizitat. curl_setopt($ch, CURLOPT_URL, "http://programam.ro//examples/detalii-request.php"); # Optiunea CURLOPT_HEADER este pentru a include sau nu headerele in output # In loc de 1 sau 0 se pot folosii si true sau false curl_setopt($ch, CURLOPT_HEADER, false); # Optiunea CURLOPT_RETURNTRANSFER ne returneaza si nu afiseaza direct ce se afla pe pagina. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); # Sa nu ne arate erori de tip 30x curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); # Cu CURLOPT_POST setam ca metoda de REQUEST sa fie POST curl_setopt($ch, CURLOPT_POST, true); # Folosim array pentru filtra caracterele speciale # De exemplu caracterul & ar incurca cererea POST $parametrii = array( 'parametru1' => 'valoare1', 'parametru2' => 'valoare2', 'parametru3' => 'caractere&& speciale' ); $string_parametrii = ''; # Folosim un foreach pentru a filtra parametrii si ai transforma intr-un string foreach ($parametrii as $k => $v){ $string_parametrii .= $k.'='.urlencode($v).'&'; } $string_parametrii = rtrim($string_parametrii,'&'); // eliminam ultimul & # Folosim htmlspecialchars deoarece in parametrii pot fi caractere similare cu entitati HTML # Iar regulile XHTML ne spun sa nu folosim caracterul & nefiltrat, in locul lui folosim & # Observati ca entitatile incep cu & si e aceea este bine sa filtram caracterul & echo 'Cum arata stringul cu parametrii: <b>'.htmlspecialchars($string_parametrii).'</b> <hr color="red"/><br/>'; curl_setopt($ch, CURLOPT_POSTFIELDS, $string_parametrii); # Executam sesiunea cURL $ch si pastram intr-o variabila rezultatul cu ajutorul CURLOPT_RETURNTRANSFER $html = curl_exec($ch); echo $html; curl_close($ch); // inchidem sesiunea cURL ?>Output:
In caz ca va intereseaza codul de la pagina http://programam.ro//examples/detalii-request.php uitati-l mai jos. Cod detalii_request.php:
<?php # fisier: /detalii-request.php echo 'Metoda de REQUEST este: <b>'.htmlspecialchars($_SERVER['REQUEST_METHOD']).'</b><hr/>'; echo 'Ai venit aici de pe pagina: <b>'.htmlspecialchars($_SERVER['HTTP_REFERER']).'</b><hr/>'; echo 'Parametrii GET sunt: <ul style="margin-top:2px;">'; foreach ($_GET as $key => $value) { echo '<li>'.htmlspecialchars($key).' => '.htmlspecialchars($value).'</li>'; } echo '</ul><hr/>'; echo 'Parametrii POST sunt: <ul style="margin-top:2px;">'; foreach ($_POST as $key => $value) { echo '<li>'.htmlspecialchars($key).' => '.htmlspecialchars($value).'</li>'; } echo '</ul><hr/>'; echo 'Parametrii COOKIE sunt: <ul style="margin-top:2px;">'; foreach ($_COOKIE as $key => $value) { echo '<li>'.htmlspecialchars($key).' => '.htmlspecialchars($value).'</li>'; } echo '</ul>'; ?>
Tags: Tutoriale, Programare Web, Php, Curs Php