Created
June 18, 2014 13:25
-
-
Save djekl/35f1bd81db36f01773e7 to your computer and use it in GitHub Desktop.
Example Curl Class Wrapper
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class CurlRequest | |
{ | |
private $api_key; | |
private $ch; | |
public function __construct($api_key) | |
{ | |
$this->api_key = $api_key; | |
} | |
/** | |
* Init curl session | |
* | |
* $params = array( | |
* 'url' => '', | |
* 'host' => '', | |
* 'header' => '', | |
* 'method' => '', | |
* 'referer' => '', | |
* 'cookie' => '', | |
* 'post_fields' => array(), | |
* 'login' => '', | |
* 'password' => '', | |
* 'timeout' => 0, | |
* ); | |
*/ | |
public function init($params = array()) | |
{ | |
$params = array_merge( | |
array( | |
'url' => '', | |
'host' => '', | |
'header' => '', | |
'method' => 'get', | |
'referer' => '', | |
'cookie' => '', | |
'post_fields' => array(), | |
'timeout' => 20, | |
), | |
$params | |
); | |
$this->ch = curl_init(); | |
$user_agent = 'curl'; | |
$header = array( | |
'X_Auth' => $this->api_key, | |
'Accept-Language' => 'en-GB', | |
); | |
if (!empty($params['host'])) { | |
$header['Host'] = $host; | |
} | |
if (!empty($params['header'])) { | |
$header += $params['header']; | |
} | |
$header = http_build_query($header); | |
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true); | |
curl_setopt($this->ch, CURLOPT_VERBOSE, true); | |
curl_setopt($this->ch, CURLOPT_HEADER, true); | |
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true); | |
curl_setopt($this->ch, CURLOPT_HTTPHEADER, $header ); | |
curl_setopt($this->ch, CURLOPT_USERAGENT, $user_agent); | |
curl_setopt($this->ch, CURLOPT_URL, $params['url']); | |
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, false); | |
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, false); | |
curl_setopt($this->ch, CURLOPT_TIMEOUT, $params['timeout']); | |
if (strtolower($params['method']) === 'head') { | |
curl_setopt($this->ch, CURLOPT_NOBODY, true); | |
} | |
if (!empty($params['referer'])) { | |
curl_setopt($this->ch, CURLOPT_REFERER, $params['referer'] ); | |
} | |
if (!empty($params['cookie'])) { | |
curl_setopt($this->ch, CURLOPT_COOKIE, $params['cookie']); | |
} | |
if ( $params['method'] == "POST" ) { | |
curl_setopt($this->ch, CURLOPT_POST, true ); | |
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $params['post_fields']); | |
} | |
if (!empty($params['login']) && !empty($params['password'])) { | |
curl_setopt($this->ch, CURLOPT_USERPWD, $params['login'] . ':' . $params['password']); | |
} | |
} | |
/** | |
* Make curl request | |
* | |
* return array 'header','body','curl_error','http_code','last_url' | |
*/ | |
public function exec() | |
{ | |
$response = curl_exec($this->ch); | |
$error = curl_error($this->ch); | |
$result = array( | |
'header' => '', | |
'body' => '', | |
'curl_error' => '', | |
'http_code' => '', | |
'last_url' => '', | |
); | |
if (!empty($error)) { | |
$result['curl_error'] = $error; | |
return $result; | |
} | |
$header_size = curl_getinfo($this->ch,CURLINFO_HEADER_SIZE); | |
$result['header'] = substr($response, 0, $header_size); | |
$result['body'] = substr($response, $header_size); | |
$result['http_code'] = curl_getinfo($this->ch, CURLINFO_HTTP_CODE); | |
$result['last_url'] = curl_getinfo($this->ch, CURLINFO_EFFECTIVE_URL); | |
return $result; | |
} | |
} | |
// Example of use: | |
$api_key = ''; | |
$curl = new CurlRequest($api_key); | |
$curl->init(array( | |
'url' => 'https://xboxapi.com/v2/accountXuid', | |
'host' => '', | |
'header' => '', | |
'method' => 'GET', // 'POST','HEAD' | |
'referer' => '', | |
'cookie' => '', | |
'post_fields' => array(), | |
'timeout' => 20, | |
)); | |
try { | |
$result = $curl->exec(); | |
if ($result['curl_error']) { | |
throw new Exception($result['curl_error']); | |
} | |
if (substr($result['http_code'], 0, 1) != 2) { | |
throw new Exception('HTTP Code = ' . $result['http_code']); | |
} | |
if (empty($result['body'])) { | |
throw new Exception('Body of file is empty'); | |
} | |
} catch (Exception $e) { | |
echo $e->getMessage(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment