cURL I.
A cURL library segítségével könnyedén hajtatunk végre bonyolultabb http kéréseket is.
Nézzük hogyan tudunk vele megnyitni egy weboldalt:
#elinditjuk a cURL sessiont $ch = curl_init(); #megadjuk a beallitasokat #az megnyitni kivant url curl_setopt($ch, CURLOPT_URL, "google.com"); #a valaszt nem akarjuk kozvetlenul output-olni curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); #vegrehajtjuk a kerest $result= curl_exec($ch); #lezarjuk a session-t hogy felszabaditsuk a rendszer-eroforrasokat. curl_close($ch);
Ezzel a kóddal a weboldalt tartalmát a $result valtozóba raktuk. Ebben az esetben a file_get_contents függvény-el ezt rövidebb kóddal is megoldhattuk volna, azonban ha nem tudjuk egy oldalról hogy elérhető e akkor a file_get_contents használata okozhat egy időtúllépést nem elérhető oldalnál ami megállítja a kódunkat. Tehát ha egyszerű kérést kell végrehajtani megbízható oldalon akkor használhatjuk a file_get_contents.
Ahhoz hogy a cURL ne csináljon időtúllépést ha nem elérhető oldal az alábbi megoldást kell alkalmaznunk:
$options = array( CURLOPT_URL => 'http://www.google.com/',#url megadasa CURLOPT_RETURNTRANSFER => 1,#nem akarunk kozvetlen output-ot CURLOPT_CONNECTTIMEOUT => 5 # 5 masodperc-es varakozas utan megszakitjuk a kerest ); $ch = curl_init(); curl_setopt_array($ch, $options); #megcsinaljuk a http kerest $result = curl_exec($ch); #lezarjuk a session-t hogy felszabaditsuk a rendszer-eroforrasokat. curl_close($ch);
A fenti kód két dologban különbözik az előzőtől: itt már egy tömbön keresztül adjuk meg a beállításokat és a beállításokban szerepel az időtúllépés értéke is.
A fenti kódot még lehet tovább bővíteni, mert alapból az átirányításokat a cURL nem nyitja meg,de megadhatjuk neki hogy kövesse le azokat is,valamint a referert is beállíthatjuk ha szeretnénk :
$options = array( CURLOPT_URL => 'http://www.google.com/',#url megadasa CURLOPT_RETURNTRANSFER => 1,#nem akarunk kozvetlen output-ot CURLOPT_CONNECTTIMEOUT => 5 ,# 5 masodperc-es varakozas utan megszakitjuk a kerest CURLOPT_MAXREDIRS => 5,#maximum 5 atiranyitasig kovesse az atiranyitasokat CURLOPT_REFERER => "seo.forum.hu"#beallitjuk a referert ); $ch = curl_init(); curl_setopt_array($ch, $options); #megcsinaljuk a http kerest $result = curl_exec($ch); #lezarjuk a session-t hogy felszabaditsuk a rendszer-eroforrasokat. curl_close($ch);
Az eddigiek GET kérések voltak,de a cURL segítségével POST kérést is könnyen végezhetünk. Tehát ha automatikusan szeretnénk egy form-ot egy weboldalon elküldeni és az POST-al küldi az adatokat akkor a cURL-al a formot végrehajtó kódot meg tudjuk hívni es ugyanazt az eredményt kapjuk mintha manuálisan küldtük volna el. Ezt a megoldást használva egyszerűen össze lehet rakni egy brute-force scriptet(erről is írni fogok hamarosan). De most tegyük fel hogy egy webáruház termék keresőjét szeretnénk használni és az POST-al működik. Hogy egyszerű legyen a példa tegyük fel hogy kulcsszavas keresést akarunk végezni.
A html form ami a webshop oldalán található így néz ki:
<form action="celurl.php" method="post"> <label>Kulcsszo</label><input name="keyword" type="text" /> <input name="search" type="submit" /> </form>
Valoszinűleg a celurl.php-ban a programozó ellenőrzi hogy a $_POST definialva van e,illetve én még ellenőrizném hogy nem üres e,illetve hogy a POST-on jövő search definiálva van e. Tehát az alábbi adatoknak kell a post-ban szerepelnie: keyword,search. Akkor lássuk a kódot:
$options = array( CURLOPT_URL => 'http://www.pisti-shopja.com/',#url megadasa CURLOPT_RETURNTRANSFER => 1,#nem akarunk kozvetlen output-ot CURLOPT_CONNECTTIMEOUT => 5 ,# 5 masodperc-es varakozas utan megszakitjuk a kerest CURLOPT_REFERER => "google.com"#beallitjuk a referert CURLOPT_POST => 1,#post kerest akarunk kuldeni CURLOPT_POSTFIELDS => "keyword=".urlencode("a kulcsszo amire keresunk")."&search=1"#a post tartalma(nev-ertek parok) ); $ch = curl_init(); curl_setopt_array($ch, $options); #megcsinaljuk a http kerest $result = curl_exec($ch); #lezarjuk a session-t hogy felszabaditsuk a rendszer-eroforrasokat. curl_close($ch);
Ezután a kérés után a keresés utáni oldalnak a html-kódja lesz a $result változóban.
Az eddigiek csak az alapjai a cURL-nak és rengeteg lehetőség rejlik benne. Ha tehetem folyatom még a bemutatását.
