Curl HTTP Client

Vrlo često u svojim svakodnevnim poslovima imam potrebu da parsujem podatke sa raznih sajtova (tipa lista expired domena, lista blogova na planetoidu i sl.) i to najčešće tamo gde nemam RSS na raspolaganju. Dugo vremena sam za takve zadatke koristio sopstvenu HTTP klasu baziranu na socketima, ali nisam nešto preterano bio zadovoljan perfomansama, plus sam bio suočen sa gomilom drugih problema tipa kompatibilnost između linuxa i bsd-a i sl.

U međuvremenu sam tu i tamo koristio Curl cli program (uglavnom za dibagovanje), ali mi se nikada nije preterano sviđao njegov PHP API, način na koji se setuju opcije i sl. Zbog svega gore navedenog, napravio sam sopstveni curl “oop wrapper” - jednostavnu klasu koja bi trebala da znatno olakša uobičajene zadatke kao što su slanje GET/POST zahteva, snimanje kukija i sl.

Obzirom da je još nekoliko kolega ovu klasu smatralo vrlo korisnom (neki su čak implementirali i dodatne mogućnosti), pre nekoliko nedelja odlučio sam da je submitujem na phpclasses.org kao Open Source projekat (BSD Licenca).

Evo nekoliko primera korišćenja. Klasa (kao i fajl sa primerima) može se downloadovati ovde.

<?php
/**
 * @version $Id$
 * @package dinke.net
 * @copyright © 2005 Dinke.net
 * @author Dragan Dinic
 */

require_once("curl_http_client.php");

$curl = &new Curl_HTTP_Client();

//pretend to be IE6 on windows
$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$curl->set_user_agent($useragent);

//uncomment next two lines if you want to manage cookies
//$cookies_file = "/tmp/cookies.txt";
//$curl->store_cookies($cookies_file);

//Uncomment next line if you want to set credentials
//$curl->set_credentials($username, $password);

//Uncomment next line if you want to set specific referrer
//$curl->set_referrer("http://my.referrer.url");

//if you want to send some post data
//form post data array like this one
$post_data = array('login' => 'pera', 'password' => 'joe', 'other_foo_field' => 'foo_value');
//and send request to http://www.foo.com/login.php. Result page is stored in $html_data string
$html_data = $curl->send_post_data("http://www.foo.com/login.php", $post_data);

//You can also fetch data from somewhere using get method!
//Fetch html from url
$html_data = $curl->fetch_url("http://www.foo.com/foobar.php?login=pera&password=joe&other_foo_field=foo_value");

//if you have more than one IP on your server,
//you can also bind to specific IP address like ...
//$bind_ip = "192.168.0.1";
//$curl->fetch_url("http://www.foo.com/login.php", $bind_ip);
//$html_data = $curl->send_post_data("http://www.foo.com/login.php", $post_data, $bind_ip);
?>

Comments

  1. October 3rd, 2006 | 12:44

    Evo malo probam klasu i prilicno lepo radi. Mozda ne bi bilo lose da dodas neku custom funkciju za setovanje proxy-ja (da ne mora da se hackuje).
    Odoh sad na phpclasses da ti boostujem rejting :).

  2. October 3rd, 2006 | 12:47

    Pa nemoj da hakujes, napisi metod koji to radi, posalji source, a ja cu da pregledam i submitujem izmene :)

    Vec imam neka poboljsanja od kolega koje nisu submitovane, tipa mogucnost uploada, podrska za gzip encoding i sl.

    Poz.

  3. October 3rd, 2006 | 13:31

    Pa, recimo, posto nije php5-strict klasa (fine by me :), onda je dovoljna funkcija:


    function set_proxy($proxy) {
    curl_setopt($this->ch, CURLOPT_PROXY, $proxy);
    }

    i da se poziva sa, recimo:

    $proxy = "http://proxy:xxxx";
    $curl->set_proxy($proxy);

    gde treba odrediti protokol (opciono, ako se ne varam), proxy i port (xxxx).

    Nisam bas vican ovim objasnjenjima :).
    Ovo je vrlo “basic usage”, ali meni vise nego dovoljan.

  4. March 1st, 2007 | 15:43

    […] Novu verziju možete skinuti sa PHP Classes kao i sa mog sajta - ovde. Opis svih mogućnosti možete naći ovde. March 01st 2007 Posted to Programming […]

  5. March 2nd, 2007 | 18:31

    Ja sam otprilike isto tako krenuo, preko socketa. Sada ta moja klasa podrzava i cookie, prati redirections, user agent i ostale zezalice, al’ sam resio da vise ne izmisljam toplu vodu i da za nove projekte koristim Curl (klasu;), a kasnije i u postojecim projektima svoju klasu zamenim Curl-om.

  6. March 6th, 2007 | 17:26

    […] You can download new version from PHP Classes as well from my own site ovde. For detailed list of features with some usefull examples please visit think link. March 06th 2007 Posted to Programming […]

  7. February 15th, 2008 | 20:22

    […] new version from here. For detailed list of features with some usefull examples please visit this blog entry. February 15th 2008 Posted to […]

Leave a reply