CI =& get_instance();
log_message('debug', 'cURL Class Initialized');
if (!function_exists('curl_init')) {
log_message('error', 'cURL Class - PHP was not built with cURL enabled. Rebuild PHP with --with-curl to use cURL.') ;
}
if($url) $this->create($url);
}
/* =================================================================================
* SIMPLE METHODS
* Using these methods you can make a quick and easy cURL call with one line.
* ================================================================================= */
// Return a get request results
public function simple_get($url, $options = array())
{
// If a URL is provided, create new session
$this->create($url);
// Add in the specific options provided
$this->options($options);
return $this->execute();
}
// Send a post request on its way with optional parameters (and get output)
// $url = '', $params = array(), $options = array()
public function simple_post($url, $params = array(), $options = array())
{
$this->create($url);
$this->post($params, $options);
return $this->execute();
}
// Send a post request on its way with optional parameters (and get output)
// $url = '', $params = array(), $options = array()
public function simple_put($url, $params = array(), $options = array())
{
$this->create($url);
$this->put($params, $options);
return $this->execute();
}
// Send a post request on its way with optional parameters (and get output)
// $url = '', $params = array(), $options = array()
public function simple_delete($url)
{
$this->create($url);
$this->http_method('delete');
return $this->execute();
}
public function simple_ftp_get($url, $file_path, $username = '', $password = '')
{
// If there is no ftp:// or any protocol entered, add ftp://
if(!preg_match('!^(ftp|sftp)://! i', $url)) {
$url = 'ftp://'.$url;
}
// Use an FTP login
if($username != '')
{
$auth_string = $username;
if($password != '')
{
$auth_string .= ':'.$password;
}
// Add the user auth string after the protocol
$url = str_replace('://', '://'.$auth_string.'@', $url);
}
// Add the filepath
$url .= $file_path;
$this->options(CURLOPT_BINARYTRANSFER, TRUE);
$this->options(CURLOPT_VERBOSE, TRUE);
return $this->execute();
}
/* =================================================================================
* ADVANCED METHODS
* Use these methods to build up more complex queries
* ================================================================================= */
public function post($params = array(), $options = array()) {
// If its an array (instead of a query string) then format it correctly
if(is_array($params)) {
$params = http_build_query($params);
}
// Add in the specific options provided
$this->options($options);
$this->http_method('post');
$this->option(CURLOPT_POST, TRUE);
$this->option(CURLOPT_POSTFIELDS, $params);
}
public function put($params = array(), $options = array()) {
// If its an array (instead of a query string) then format it correctly
if(is_array($params)) {
$params = http_build_query($params);
}
// Add in the specific options provided
$this->options($options);
$this->option(CURLOPT_PUT, TRUE);
$this->option(CURLOPT_POSTFIELDS, $params);
}
public function set_cookies($params = array()) {
if(is_array($params)) {
$params = http_build_query($params);
}
$this->option(CURLOPT_COOKIE, $params);
return $this;
}
public function http_header($header_string)
{
$this->headers[] = $header_string;
}
public function http_method($method)
{
$this->options[CURLOPT_CUSTOMREQUEST] = strtoupper($method);
return $this;
}
public function http_login($username = '', $password = '', $type = 'any')
{
$this->option(CURLOPT_HTTPAUTH, constant('CURLAUTH_'.strtoupper($type) ));
$this->option(CURLOPT_USERPWD, $username.':'.$password);
return $this;
}
public function proxy($url = '', $port = 80) {
$this->option(CURLOPT_HTTPPROXYTUNNEL. TRUE);
$this->option(CURLOPT_PROXY, $url.':'. 80);
return $this;
}
public function proxy_login($username = '', $password = '') {
$this->option(CURLOPT_PROXYUSERPWD, $username.':'.$password);
return $this;
}
public function options($options = array())
{
// Merge options in with the rest - done as array_merge() does not overwrite numeric keys
foreach($options as $option_code => $option_value)
{
$this->option($option_code, $option_value);
}
unset($option_code, $option_value);
// Set all options provided
curl_setopt_array($this->session, $this->options);
return $this;
}
public function option($code, $value) {
$this->options[$code] = $value;
return $this;
}
// Start a session from a URL
public function create($url) {
// Reset the class
$this->set_defaults();
// If no a protocol in URL, assume its a CI link
if(!preg_match('!^\w+://! i', $url)) {
$this->CI->load->helper('url');
$url = site_url($url);
}
$this->url = $url;
$this->session = curl_init($this->url);
return $this;
}
// End a session and return the results
public function execute()
{
// Set two default options, and merge any extra ones in
if(!isset($this->options[CURLOPT_TIMEOUT])) $this->options[CURLOPT_TIMEOUT] = 30;
if(!isset($this->options[CURLOPT_RETURNTRANSFER])) $this->options[CURLOPT_RETURNTRANSFER] = TRUE;
if(!isset($this->options[CURLOPT_FOLLOWLOCATION])) $this->options[CURLOPT_FOLLOWLOCATION] = TRUE;
if(!isset($this->options[CURLOPT_FAILONERROR])) $this->options[CURLOPT_FAILONERROR] = TRUE;
if(!empty($this->headers))
{
$this->option(CURLOPT_HTTPHEADER, $this->headers);
}
$this->options();
// Execute the request & and hide all output
$this->responce = curl_exec($this->session);
// Request failed
if($this->responce === FALSE)
{
$this->error_code = curl_errno($this->session);
$this->error_string = curl_error($this->session);
curl_close($this->session);
$this->session = NULL;
return FALSE;
}
// Request successful
else
{
$this->info = curl_getinfo($this->session);
curl_close($this->session);
$this->session = NULL;
return $this->responce;
}
}
public function debug()
{
echo "=============================================
\n";
echo "
".nl2br(htmlentities($this->responce))."
"; print_r($this->info); echo ""; } private function set_defaults() { $this->responce = ''; $this->info = array(); $this->options = array(); $this->error_code = 0; $this->error_string = ''; } } // END cURL Class /* End of file cURL.php */ /* Location: ./application/libraries/curl.php */