I have written this sample code to fetch a web page in C++ using libcurl. Please review it.#include <iostream>#include <iostream>#include <string>#include <exception>extern C{#include <curl/curl.h>#include <stdlib.h>}//Exception class for curl exceptionclass CurlException : std::exception{public:   CurlException(std::string message):m_message(message) {  }   CurlException(CURLcode error)   {      m_message = curl_easy_strerror(error);   }   const char* what() throw()   {      return m_message.c_str();   }   ~CurlException() throw() { }private:   std::string m_message;};//A tiny wrapper around Curl C Libraryclass CppCurl{public:   CppCurl(std::string url) throw (CurlException)   {      m_handle = curl_easy_init();      if ( m_handle == NULL )         throw CurlException(Unable to initialize curl handler);      if ( url.length() == 0 )         throw CurlException(URL can't be of zero length);      m_url = url;   }   std::string Fetch() throw (CurlException)   {      SetOptions();      SendGetRequest();      return m_data;   }   ~CppCurl() throw()   {      curl_easy_cleanup(m_handle);   }private:   void SetOptions() throw (CurlException)   {      CURLcode res;      //set the url      res = curl_easy_setopt(m_handle, CURLOPT_URL, m_url.c_str());      if ( res != CURLE_OK)         throw CurlException(res);      //progress bar is not require      res = curl_easy_setopt(m_handle, CURLOPT_NOPROGRESS, 1L);      if ( res != CURLE_OK )         throw CurlException(res);      //set the callback function      res = curl_easy_setopt(m_handle, CURLOPT_WRITEFUNCTION,                              CppCurl::WriteDataCallback);      if ( res != CURLE_OK )         throw CurlException(res);      //set pointer in call back function      res = curl_easy_setopt(m_handle, CURLOPT_WRITEDATA, this);      if ( res != CURLE_OK )         throw CurlException(res);   }   void SendGetRequest()   {      CURLcode res;      res = curl_easy_perform(m_handle);      if ( res != CURLE_OK )         throw CurlException(res);   }   static size_t WriteDataCallback(void *ptr, size_t size,                                    size_t nmemb, void* pInstance)   {      return (static_cast<CppCurl*>(pInstance))->write_data(ptr, size, nmemb);   }   size_t write_data(void* ptr, size_t size, size_t nmemb)   {      size_t numOfBytes = size * nmemb;      char *iter = (char*)ptr;      char *iterEnd = iter + numOfBytes;      //while ( iter != iterEnd )      //{      //   cout<<*iter;      //   iter ++;      //}      m_data += std::string(iter, iterEnd);      return numOfBytes;   }   CURL *m_handle;   std::string m_url;   std::string m_data;};int main(){   try   {      CppCurl ob(http://kodeyard.blogspot.in/);      std::cout<<ob.Fetch();      std::cout<<std::endl;   }   catch ( CurlException e)   {      std::cerr<<Exception thrown...<<std::endl;      std::cerr<<e.what()<<std::endl;   }   return 0;}This is also here in the blog.
Tiny Curl C++ wrapper
c++;curl