Skip to main content

Curl HTTP Client

Frequently, in my daytime job I have to fetch data from various url’s, either by sending get or post request, binding to different IP address etc. Long time I used my own socket based HTTP class, although I wasn’t quite happy with perfomances and various other things with it. I already used curl cli tool (mostly for debugging purposes), but didn’t really liked it’s php api, so I’ve decided to take some spare time and make some kind of oop wrapper for it, which should be easier to use for easy stuff like sending get/post request etc.

I use this class several months since then, and it evolved over time whenever I needed some new feature. Since various of my colleagues found it very usefull (some of them even sent me new methods for it), I’ve decided to put it out for public. Recently I submitted a code to phpclasses.org, and today got confirmation that class is officially approved.

Update 03/01/2007
New version 1.1 released with new features: fetch into file, upload, proxy etc.

Update 15/02/2008
New version 1.2 released with few bug fixes. New features are ability to send post string as string argument in send_post_data method, ability to accept gzipped content, close curl session etc.

Update 25/03/2013
Version 2.0 released. Pretty much the same features as old versions, but with updated code in order to match latest PHP changes. Code will be regularly updated on github.

You can download class and example files directly from gitgub https://github.com/dinke/curl_http_client

Here are few usage examples.

<?php
/**
 * @version 2.0
 * @package dinke.net
 * @copyright © 2013 Lampix.net
 * @author Dragan Dinic 
 */

require_once("curl_http_client.php");

$curl = new Curl_HTTP_Client();

//pretend to be Firefox 19.0 on Mac
$useragent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0";
$curl->set_user_agent($useragent);

//uncomment next two lines if you want to automatically manage cookies
//which will store them to file and send them on each http request
//$cookies_file = "/tmp/cookies.txt";
//$curl->store_cookies($cookies_file);

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

//Uncomment next line if you want to set specific referrer
//$curl->set_referer('http://www.foo.com/referer_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');
//or like a string: $post_data = '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);

//and there are many other things you can do like

//use proxy
//$curl->set_proxy('http://www.proxyurl.com');

//get http response code for last request
//$http_code = $curl->get_http_response_code();

//get last http request duration in sec
//$duration = $curl->get_request_duration();
?>

Google Page Creator

Don’t know about you, but I have difficulties to follow up with all services Google announce almost each day. GMail, GMap, GTalk, GCal, GSpreadsheets, … and lately we got Google Page Creator.

Google Page Creator is another one Web 2.0 application, which allow us to create Web Pages in a snap. Like with others simmilar tools, you don’t have to know html or any other technology, all you need is your browser and little creativity. Unlike other tools Page Creator is very easy to use (thanks to very good Ajax implementation), so in as little as 5 minutes you can come up with your new Web Site. Such site will be indexed by google shortly, and will be hosted free on address like: http://yourgoogleaccount.googlepages.com.

You can see results of my 5 minute Page Creatoru session here :)

Started blogging in English

Few days ago I’ve decided to open english section on my blog. Thanks to Gengo wp plugin, I was able to separate english from serbian posts, then I translated some of old post from Serbian edition (mostly programming stuff).

Why am I doing this ? Well, since I started blogging I put great effort to write several programming tutorials, but found that these don’t have such a big audience here in Serbia. Since I got really good feedback from few people that were read them, and really wanted to offer those stuff to greater range of people, I’ve decided to put some little more effort, and translate them to english. Hopefully they will be usefull for someone, feel free to send in comments :)

.cm domains

Do you know what following sites have in common:

dinke.cm
johndoe.cm
unexistant.cm

All of above, as well as any domain on .cm extension will send you to the same page. These are all pages on Cameroon’s cctld ‘.cm’, whose nic has decided (due to similarities with .com domains) to generate more outcomes from ads.

Web 2.0 IM

If you are addicted to various Instant Messenger programs (MSN, ICQ, etc.), and somehow you don’t have a proper client available, Meebo is right thing for you.

Meebo is another one Web 2.0 application which serve as replacement for popular desktop applications. Mebo works like “all in one” IM client (like GAIM or Trillian), and so far it support ICQ, AOL, Yahoo, Jabber and MSN protocols. I’ve tested it for a while with ICQ (which is the one I prefer) and so far it worked fine. If nothing else, very good way to keep ICQ history accessible from any place on the Earth :)

meebo u akciji