_ci = & get_instance(); if ( ! $this->is_enabled()) { log_message('error', 'cURL Class - PHP was not built with cURL enabled. Rebuild PHP with --with-curl to use cURL.'); } $url AND $this->create($url); } function __call($method, $arguments) { if (in_array($method, array('simple_get', 'simple_post', 'simple_put', 'simple_delete'))) { // Take off the "simple_" and past get/post/put/delete to _simple_call $verb = str_replace('simple_', '', $method); array_unshift($arguments, $verb); return call_user_func_array(array($this, '_simple_call'), $arguments); } } /* ================================================================================= * SIMPLE METHODS * Using these methods you can make a quick and easy cURL call with one line. * ================================================================================= */ public function _simple_call($method, $url, $params = array(), $options = array()) { // Get acts differently, as it doesnt accept parameters in the same way if ($method === 'get') { // If a URL is provided, create new session $this->create($url.($params ? '?'.http_build_query($params) : '')); } else { // If a URL is provided, create new session $this->create($url); $this->{$method}($params); } // Add in the specific options provided $this->options($options); 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->option(CURLOPT_BINARYTRANSFER, TRUE); $this->option(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, NULL, '&'); } // 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, NULL, '&'); } // Add in the specific options provided $this->options($options); $this->http_method('put'); $this->option(CURLOPT_POSTFIELDS, $params); // Override method, I think this overrides $_POST with PUT data but... we'll see eh? $this->option(CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: PUT')); } public function delete($params, $options = array()) { // If its an array (instead of a query string) then format it correctly if (is_array($params)) { $params = http_build_query($params, NULL, '&'); } // Add in the specific options provided $this->options($options); $this->http_method('delete'); $this->option(CURLOPT_POSTFIELDS, $params); } public function set_cookies($params = array()) { if (is_array($params)) { $params = http_build_query($params, NULL, '&'); } $this->option(CURLOPT_COOKIE, $params); return $this; } public function http_header($header, $content = NULL) { $this->headers[] = $content ? $header . ': ' . $content : $header; } 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 . ':' . $port); return $this; } public function proxy_login($username = '', $password = '') { $this->option(CURLOPT_PROXYUSERPWD, $username . ':' . $password); return $this; } public function ssl($verify_peer = TRUE, $verify_host = 2, $path_to_cert = NULL) { if ($verify_peer) { $this->option(CURLOPT_SSL_VERIFYPEER, TRUE); $this->option(CURLOPT_SSL_VERIFYHOST, $verify_host); $this->option(CURLOPT_CAINFO, $path_to_cert); } else { $this->option(CURLOPT_SSL_VERIFYPEER, FALSE); } 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); } // Set all options provided curl_setopt_array($this->session, $this->options); return $this; } public function option($code, $value) { if (is_string($code) && !is_numeric($code)) { $code = constant('CURLOPT_' . strtoupper($code)); } $this->options[$code] = $value; return $this; } // Start a session from a URL public function create($url) { // 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_FAILONERROR])) { $this->options[CURLOPT_FAILONERROR] = TRUE; } // Only set follow location if not running securely if ( ! ini_get('safe_mode') && !ini_get('open_basedir')) { // Ok, follow location is not set already so lets set it to true if ( ! isset($this->options[CURLOPT_FOLLOWLOCATION])) { $this->options[CURLOPT_FOLLOWLOCATION] = TRUE; } } if ( ! empty($this->headers)) { $this->option(CURLOPT_HTTPHEADER, $this->headers); } $this->options(); // Execute the request & and hide all output $this->response = curl_exec($this->session); $this->info = curl_getinfo($this->session); // Request failed if ($this->response === FALSE) { $this->error_code = curl_errno($this->session); $this->error_string = curl_error($this->session); curl_close($this->session); $this->set_defaults(); return FALSE; } // Request successful else { curl_close($this->session); $response = $this->response; $this->set_defaults(); return $response; } } public function is_enabled() { return function_exists('curl_init'); } public function debug() { echo "=============================================
\n"; echo "

CURL Test

\n"; echo "=============================================
\n"; echo "

Response

\n"; echo "" . nl2br(htmlentities($this->response)) . "
\n\n"; if ($this->error_string) { echo "=============================================
\n"; echo "

Errors

"; echo "Code: " . $this->error_code . "
\n"; echo "Message: " . $this->error_string . "
\n"; } echo "=============================================
\n"; echo "

Info

"; echo "
";
		print_r($this->info);
		echo "
"; } public function debug_request() { return array( 'url' => $this->url ); } private function set_defaults() { $this->response = ''; $this->headers = array(); $this->options = array(); $this->error_code = NULL; $this->error_string = ''; $this->session = NULL; } } /* End of file Curl.php */ /* Location: ./application/libraries/Curl.php */