Tomorrow i will explain more and make it under extensions an article about CURL extension, i go to sleep now ![]()
EDIT: now its perfect
GET EXAMPLE
$data = Yii::app()->CURL->run('http://www.google.com/ig/calculator?q='.$amount.$from.'=?'.$to);
print_r($data);
GET EXAMPLE
$data = Yii::app()->CURL->run('http://maps.google.com/maps/geo?q='.$place.'&output=json&key=ABQIAAAAR3YzPp1SL-w7k-Nhadw6oRRSU9EEwCG8ydw3m56rm2GtI8BohRSHN1qNuRyOrnYS_BNY1_2RnyuYTA');
POST EXAMPLE
$data = Yii::app()->CURL->run('http://www.atropa.com.hr/index.php?',FALSE,
	array(
	'option'=>'com_content','view'=>'article','id'=>58,'Itemid'=>2
	)
);
print_r($data);
<?php
/*
* Yii extension CURL
* This is a base class for procesing CURL REQUEST
*
* @author Igor Ivanović
* @version 0.1      
* @modifid date: 16-12-2010
* @filesource CURL.php
*
*/
class Curl extends CApplicationComponent{
        
        protected $url;
        protected $ch;
        
	public $options = array();
	public $info = array();
    	public $error_code = 0;
    	public $error_string = '';
        
        
        
	protected $validOptions = array(
        'timeout'=>array('type'=>'integer'),    
	'login'=>array('type'=>'array'),
	'proxy'=>array('type'=>'array'),
	'proxylogin'=>array('type'=>'array'),
	'setOptions'=>array('type'=>'array'),
	);
        
        
	/**
	 * Initialize the extension
	 * check to see if CURL is enabled and the format used is a valid one
	 */
	public function init(){
		if( !function_exists('curl_init') )
		throw new CException( Yii::t('Curl', 'You must have CURL enabled in order to use this extension.') );
                
	}
         /**
        * Setter
        * @set the option
        */
        protected function setOption($key,$value){
        curl_setopt($this->ch,$key, $value);
        }
	
        
	/**
	* Formats Url if http:// dont exist
	* set http://
	*/
        public function setUrl($url){
	if(!preg_match('!^\w+://! i', $url)) {
	$url = 'http://'.$url;
	}
        $this->url = $url;
        }
	 /*
	* Set Url Cookie
	*/
        public function setCookies($values){
        if (!is_array($values))
        throw new CException(Yii::t('Curl', 'options must be an array'));
        else
        $params = $this->cleanPost($values);
        $this->setOption(CURLOPT_COOKIE, $params);
        }
	/*
	@LOGIN REQUEST
	sets login option
	If is not setted , return false
	*/
        public function setHttpLogin($username = '', $password = '') {
        $this->setOption(CURLOPT_USERPWD, $username.':'.$password);
        }
        /*
	@PROXY SETINGS
	sets proxy settings withouth username
	*/
        public function setProxy($url,$port = 80){
	$this->setOption(CURLOPT_HTTPPROXYTUNNEL, TRUE);
        $this->setOption(CURLOPT_PROXY, $url.':'.$port);
	}
	/*
	@PROXY LOGIN SETINGS
	sets proxy login settings calls onley if is proxy setted
	*/
	public function setProxyLogin($username = '', $password = '') {
        $this->setOption(CURLOPT_PROXYUSERPWD, $username.':'.$password);
        }
	/*
	@VALID OPTION CHECKER
	*/
	protected static function checkOptions($value, $validOptions)
        {
        if (!empty($validOptions)) {
            foreach ($value as $key=>$val) {
                if (!array_key_exists($key, $validOptions)) {
                    throw new CException(Yii::t('Curl', '{k} is not a valid option', array('{k}'=>$key)));
                }
                $type = gettype($val);
                if ((!is_array($validOptions[$key]['type']) && ($type != $validOptions[$key]['type'])) || (is_array($validOptions[$key]['type']) && !in_array($type, $validOptions[$key]['type']))) {
                        throw new CException(Yii::t('Curl', '{k} must be of type {t}',
                        array('{k}'=>$key,'{t}'=>$validOptions[$key]['type'])));
                }
                if (($type == 'array') && array_key_exists('elements', $validOptions[$key])) {
                        self::checkOptions($val, $validOptions[$key]['elements']);
                    }
                }
            }
        }
        
        protected function defaults(){
            !isset($this->options['timeout'])  ?  $this->setOption(CURLOPT_TIMEOUT,30) : $this->setOption(CURLOPT_TIMEOUT,$this->options['timeout']);
            isset($this->options['setOptions'][CURLOPT_HEADER]) ? $this->setOption(CURLOPT_HEADER,$this->options['setOptions'][CURLOPT_HEADER]) : $this->setOption(CURLOPT_HEADER,FALSE);
            isset($this->options['setOptions'][CURLOPT_RETURNTRANSFER]) ? $this->setOption(CURLOPT_RETURNTRANSFER,$this->options['setOptions'][CURLOPT_RETURNTRANSFER]) : $this->setOption(CURLOPT_RETURNTRANSFER,TRUE);
	    isset($this->options['setOptions'][CURLOPT_FOLLOWLOCATION]) ? $this->setOption(CURLOPT_FOLLOWLOCATIO,$this->options['setOptions'][CURLOPT_FOLLOWLOCATION]) : $this->setOption(CURLOPT_FOLLOWLOCATION,TRUE);
            isset($this->options['setOptions'][CURLOPT_FAILONERROR]) ? $this->setOption(CURLOPT_FAILONERROR,$this->options['setOptions'][CURLOPT_FAILONERROR]) : $this->setOption(CURLOPT_FAILONERROR,TRUE);  
        }
	
	/*
	@MAIN FUNCTION FOR PROCESSING CURL
	*/
	public function run($url,$GET = TRUE,$POSTSTRING = array()){
                $this->setUrl($url);
                if( !$this->url )
		throw new CException( Yii::t('Curl', 'You must set Url.') );
                $this->ch = curl_init();
		self::checkOptions($this->options,$this->validOptions);
                
                if($GET == TRUE){
                $this->setOption(CURLOPT_URL,$this->url);
                $this->defaults();
                }else{
                $this->setOption(CURLOPT_URL,$this->url);
                $this->defaults();
                $this->setOption(CURLOPT_POST, TRUE);
                $this->setOption(CURLOPT_POSTFIELDS, $this->cleanPost($POSTSTRING));        
                }
                
                if(isset($this->options['setOptions']))
		foreach($this->options['setOptions'] as $k=>$v)
		$this->setOption($k,$v);
                
                isset($this->options['login']) ?  $this->setHttpLogin($this->options['login']['username'],$this->options['login']['password']) :  null;
                isset($this->options['proxy']) ? $this->setProxy($this->options['proxy']['url'],$this->options['proxy']['port']) : null;
                
                if(isset($this->options['proxylogin'])){
		if(!isset($this->options['proxy']))
		throw new CException( Yii::t('Curl', 'If you use "proxylogin", you must define "proxy" with arrays.') );
		else
		$this->setProxyLogin($this->options['login']['username'],$this->options['login']['password']);
		}
                
                $return = curl_exec($this->ch);
		// Request failed
		if($return === FALSE)
		{
		$this->error_code = curl_errno($this->ch);
		$this->error_string = curl_error($this->ch);
		curl_close($this->ch);
		echo "Error code: ".$this->error_code."<br />";
		echo "Error string: ".$this->error_string;
		// Request successful
		} else {
		$this->info = curl_getinfo($this->ch);
	        curl_close($this->ch);
		return $return;
		}
                
                
                
                
      }
                
                
        
        
        
        
      
	/**
	 * Arrays are walked through using the key as a the name.  Arrays
	 * of Arrays are emitted as repeated fields consistent with such things
	 * as checkboxes.
	 * @desc Return data as a post string.
	 * @param mixed by reference data to be written.
	 * @param string [optional] name of the datum.
	 */
	protected function &cleanPost(&$string, $name = NULL)
	  {
		$thePostString = '' ;
		$thePrefix = $name ;
		if (is_array($string))
		{
		  foreach ($string as $k => $v)
		  {
			if ($thePrefix === NULL)
                    {
			  $thePostString .= '&' . self::cleanPost($v, $k) ;
                    }
		else
			{
			  $thePostString .= '&' . self::cleanPost($v, $thePrefix . '[' . $k . ']') ;
			}
                }
                
		}
		else
		{
		  $thePostString .= '&' . urlencode((string)$thePrefix) . '=' . urlencode($string) ;
		}
		$r =& substr($thePostString, 1) ;
		return $r ;
	  }
}//end of method