--- /dev/null
+<?php
+
+/**
+* Instagram PHP
+* @author Galen Grover <galenjr@gmail.com>
+* @license http://opensource.org/licenses/mit-license.php The MIT License
+*/
+
+namespace Instagram\Net;
+
+/**
+ * Curl Client
+ *
+ * Uses curl to access the API
+ */
+class CurlClient implements ClientInterface {
+
+ /**
+ * Curl Resource
+ *
+ * @var curl resource
+ */
+ protected $curl = null;
+
+ /**
+ * Constructor
+ *
+ * Initializes the curl object
+ */
+ function __construct(){
+ $this->initializeCurl();
+ }
+
+ /**
+ * GET
+ *
+ * @param string $url URL to send get request to
+ * @param array $data GET data
+ * @return \Instagram\Net\Response
+ * @access public
+ */
+ public function get( $url, array $data = null ){
+ curl_setopt( $this->curl, CURLOPT_CUSTOMREQUEST, 'GET' );
+ curl_setopt( $this->curl, CURLOPT_URL, sprintf( "%s?%s", $url, http_build_query( $data ) ) );
+ return $this->fetch();
+ }
+
+ /**
+ * POST
+ *
+ * @param string $url URL to send post request to
+ * @param array $data POST data
+ * @return \Instagram\Net\Response
+ * @access public
+ */
+ public function post( $url, array $data = null ) {
+ curl_setopt( $this->curl, CURLOPT_CUSTOMREQUEST, 'POST' );
+ curl_setopt( $this->curl, CURLOPT_URL, $url );
+ curl_setopt( $this->curl, CURLOPT_POSTFIELDS, http_build_query( $data ) );
+ return $this->fetch();
+ }
+
+ /**
+ * PUT
+ *
+ * @param string $url URL to send put request to
+ * @param array $data PUT data
+ * @return \Instagram\Net\Response
+ * @access public
+ */
+ public function put( $url, array $data = null ){
+ curl_setopt( $this->curl, CURLOPT_CUSTOMREQUEST, 'PUT' );
+ }
+
+ /**
+ * DELETE
+ *
+ * @param string $url URL to send delete request to
+ * @param array $data DELETE data
+ * @return \Instagram\Net\Response
+ * @access public
+ */
+ public function delete( $url, array $data = null ){
+ curl_setopt( $this->curl, CURLOPT_URL, sprintf( "%s?%s", $url, http_build_query( $data ) ) );
+ curl_setopt( $this->curl, CURLOPT_CUSTOMREQUEST, 'DELETE' );
+ return $this->fetch();
+ }
+
+ /**
+ * Initialize curl
+ *
+ * Sets initial parameters on the curl object
+ *
+ * @access protected
+ */
+ protected function initializeCurl() {
+ $this->curl = curl_init();
+ curl_setopt( $this->curl, CURLOPT_RETURNTRANSFER, true );
+ curl_setopt( $this->curl, CURLOPT_SSL_VERIFYPEER, false );
+ }
+
+ /**
+ * Fetch
+ *
+ * Execute the curl object
+ *
+ * @return StdClass
+ * @access protected
+ * @throws \Instagram\Core\ApiException
+ */
+ protected function fetch() {
+ $raw_response = curl_exec( $this->curl );
+ $error = curl_error( $this->curl );
+ if ( $error ) {
+ throw new \Instagram\Core\ApiException( $error, 666, 'CurlError' );
+ }
+ return $raw_response;
+ }
+
+}
\ No newline at end of file