Menu

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.

Inainte sa folositi curl asigurati-va ca il aveti instalat, pentru a instala curl cand folositi LAMP se foloseste:
apt-get install php5-curl
/etc/init.d/apache2 restart
Iar 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.dll
in
extension=php_curl.dll

1. Mod de folosire curl

Sunt sigur ca va mai amintiti cand am lucrat cu fisiere in mod avansat(fopen si altele). Ei bine atunci fopen returna acel handler de care aveati nevoie in functiile specifice fisierelor, ei bine cu CURL totul este asemanator, returneaza handler-ul pentru CURL in caz de succes iar in caz contrar returneaza false. Exemplu folosire curl(urmariti comentariile):
<?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:
(click pe imagine pentru marire)
Dupa cum vedeti continutul de pe site-ul http://example.iana.org/ a fost preluat pe pagina noastra. Acesta este un exemplu foarte simplu, utilizarile cURL sunt nelimitate.

2. Setare optiuni cURL

In exemplul anterior am folosit cu cURL de doua ori functia pentru setarea unei optiuni asupra unei sesiuni cURL si anume curl_setopt.
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
Optiunile le gasiti pe http://www.php.net/manual/en/function.curl-setopt.php, sunt foarte multe, din fericire noi in aceasta lectie ne vom asigura ca le vei invata pe cele mai importante. Dupa cum am spus utilizarile curl sunt nenumarabile deci si optiunile sunt pe masura.

2.1 Cereri de tip POST

Cu cURL putem face cereri de tip POST, foarte util cand dorim sa ne logam pe alt site cu cURL. Pentru asta folosim optiunea CURLOPT_POST pentru a seta ca metoda de REQUEST este POST si optiunea CURLOPT_POSTFIELDS pentru a seta parametrii de trimis in format parametru1=valoare1&parametru2=valoare2&parametru3=valoare3.
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>';
?>


Ti-a placut articolul? Asigura-te ca-ti dam de veste cand publicam altele noi.


Tags: Tutoriale, Programare Web, Php, Curs Php

Comments Nota 0 din 0