HTTP Class for PHP (supports both cURL and fsockopen)

Feb 2009: A couple bugs have been fixed and library updated.

This is a wrapper HTTP class that uses either cURL or fsockopen to harvest resources from the web. It supports a handy subset of functionalists of HTTP that are mostly needed in day to day coding. Scripts who need to communicate with other servers will find it useful. If you’re looking to invoke any RESTful API and don’t want to bother adding a bunch of libraries for that simple thing, just put this class and you’re set.

Detailed documentation can be found here. And you can download the source from here.

UPDATE: Class added in Orchid - “PHP framwork for the rest of us”

Features

  • Can use both cURL and fsockopen.
  • Degrades to fsockopen if cURL not enabled.
  • Supports HTTP Basic authentication.
  • Supports defining custom request headers.
  • Supports defining connection timeout values.
  • Supports defining user agent and referral values.
  • Supports both user-defined and persistent cookies.
  • Supports secure connections (HTTPS) with and without cURL.
  • Supports adding requests parameters for both GET and POST.
  • Supports automatic redirection (maximum redirect can be defined).
  • Returns HTTP response headers and response body data separately.

Example 1 - Simple Get (Facebook Application List)

   1: <?php
   2:  
   3: include_once('class.http.php');
   4:  
   5: $http = new Http();
   6:  
   7: $http->execute('http://www.facebook.com/apps/index.php?sort=6');
   8: echo ($http->error) ? $http->error : $http->result;
   9:  
  10: ?>

Example 2 - Invoking Yahoo Term Extraction API

   1: <?php
   2:  
   3: include_once('class.http.php');
   4:  
   5: $http = new Http();
   6:  
   7: $http->addParam('appid'   , 'a_really_random_yahoo_app_id');
   8: $http->addParam('context' , 'I am happy because I bought a new car');
   9: $http->addParam('output'  , 'xml');
  10:                         
  11: $http->execute('http://search.yahooapis.com/ContentAnalysisService/V1/termExtraction');
  12: echo ($http->error) ? $http->error : $http->result;
  13:  
  14: ?>

Example 3 - Logging into Basecamp (without using cURL!)

   1: <?php
   2:  
   3: include_once('class.http.php');
   4:  
   5: $http = new Http();
   6:  
   7: $http->useCurl(false);
   8: $http->setMethod('POST');
   9:  
  10: $http->addParam('user_name', 'emran');
  11: $http->addParam('password', 'hasan');
  12:  
  13: $http->setReferrer('https://someproject.projectpath.com/login');
  14: $http->execute('https://someproject.projectpath.com/login/authenticate');
  15:  
  16: echo ($http->error) ? $http->error : $http->result;
  17:  
  18: ?>

Example 4 - Getting a protected feed

   1: <?php
   2:  
   3: include_once('class.http.php');
   4:  
   5: $http = new Http();
   6: $http->setAuth('emran', 'hasan');
   7:  
   8: $http->execute('http://www.someblog.com/protected/feed.xml');
   9: echo ($http->error) ? $http->error : $http->result;
  10:  
  11: ?>

Download

class.http.php
HTTP Class for PHP (supports both cURL and fsockopen)
Downloaded: 2950 times
Share and Enjoy:
  • Digg
  • DZone
  • Reddit
  • del.icio.us
  • StumbleUpon
  • Technorati
  • Slashdot
  • Facebook
  • Google
  • Ma.gnolia
  • Furl
  • Simpy
  • Ping.fm
  • TwitThis
  • LinkedIn
  • Tumblr
Post rating
1 Star2 Stars3 Stars4 Stars5 Stars (16 votes, average: 4.63 out of 5)
Loading ... Loading ...

  • You can add this function in Orchid framework. :)
  • Yeah Omi bhai - i've already planned that :) Just not been able to log into the SVN lately :(
  • Great job Emran vai. Finally you released this. :)
    yea its a good idea if you add this to orchid framework. :)

    cool man :)
  • H2
    Well done Batman! A very good one. I was thinking that we need such a class library for orchid. Can I please add your class with default distribution?

    You are doing excellent. Keep up the good work. Godspeed.
  • Thanks Hasin. And yes, i would be honored if this is added to orchid.
  • Wow, It's a nice theme. Tobe menu gula dekhte ekto asubidha hocche r ki :)
  • Simply GENIUS!
    Excellent structure, easy to use and ???????? documentation.
  • Thanks for the code. I found it in the Code Igniter forums. I turned it into a library for use in my most recent web app.
  • @jack: Great to know that it came to help you exactly in the manner i expected it would. Great to know that you're using it in your project :)
  • cool work.
  • Thx for this awesome class. How to make it aouto detect for curl or dsockopen ?
  • @Andy Gelox: You're welcome. The class tries to use cURL by default, but if cURL is not installed, it automatically falls back to fsockopen. And you can specify by yourself in case you need to. Cheers!
  • Richard
    When use the class ,I notice
    the cURL require a website need longer time then fsockect.is it?
  • Hi,

    with allow redirect set to true if i call a page with status code 302 i can't read the headers of destination page, i read only the headers of first page.

    it's normal?

    can you help me?

    Thanks

    ciao
    riccardo
  • Thanks for sharing the class.

    It is quite helpful in php4 and php5. Love how it degrades automatically if there is no CURL. Have you though of supporting stream wrappers?
  • Vince
    It seems that fsockopen method doesn't follow redirects.
  • Well, it should follow redirects with or without cURL. I will have a look
    into it and will update the source if needed. Thanks
  • Eydun
    Is it possible with this class to post data, so they can be fetch on the other side with: file_get_contents("php://input")?
  • Yes, of course !
  • pwb
    What's the point of cURL if fsockopen works?
  • The library supports both, so it's the choice of the dev :)
  • Rob
    Could you please show me an example of the usage of cookies inside this class?
  • Yes, it's similar to how you add a param:
    $http->addCookie('logged_in_user' , '747');
  • Any reason the redirects on fsockopen route don't support 301 redirects?

    --snip--
    if ($this->status == '302' && $this->redirect == TRUE)
    --snip--
  • Fixed. Thanks for noticing.
  • Thanks for making this useful class available. I was wondering if there's a way to download a zip file using this utility - to be unzipped later.
blog comments powered by Disqus