* * Created: Nath - 25 Jan 2010 22:26:33 * Modified: SVN: $Id$ * PHP Version: 5.1.6+ * * @package @project.name@ * @author Nathan * @version SVN: $Revision$ */ class RestInterface { const DEFAULT_TIMEOUT = 20; const HTTP_METHOD_GET = 'GET'; const HTTP_METHOD_POST = 'POST'; public static $SUPPORTED_HTTP_METHODS = array( self::HTTP_METHOD_GET, self::HTTP_METHOD_POST, ); private $endpoint; private $headers = array(); private $method; private $params = array(); private $timeout; public function __construct() { $this->reset(); } public function setEndpoint( $endpoint ) { $this->endpoint = $endpoint; } public function getEndpoint() { if( is_null( $this->endpoint ) ) { throw new InvalidArgumentException( 'no endpoint specified' ); } return $this->endpoint; } public function setMethod( $method ) { $method = strtoupper(trim($method)); if( !in_array( $method , self::$SUPPORTED_HTTP_METHODS ) ) { throw new InvalidArgumentException( $method ); } $this->method = $method; } public function setTimeout( $timeout ) { $this->timeout = (int)$timeout; } public function getTimeout() { if( is_null( $this->timeout ) ) { return self::DEFAULT_TIMEOUT; } return $this->timeout; } public function addParam( $key, $value ) { $this->params[ $key ] = $value; } public function addHeader( $key, $value ) { $this->headers[] = $key . ': ' . $value; } public function reset( $resetEndpoint=true ) { if( $resetEndpoint ) { $this->endpoint = null; } $this->headers = array(); $this->params = array(); $this->method = self::HTTP_METHOD_GET; } public function sendRequest() { $ch = curl_init(); if (! is_resource($ch) ) { return false; } curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER , 0 ); curl_setopt( $ch , CURLOPT_FOLLOWLOCATION , 0 ); curl_setopt( $ch , CURLOPT_URL , $this->getEndpoint() ); switch( $this->method ) { case self::HTTP_METHOD_GET: curl_setopt( $ch , CURLOPT_HTTPGET , 1 ); if( count($this->params) > 0 ) { curl_setopt( $ch , CURLOPT_URL , $this->getEndpoint() . '?' . http_build_query($this->params) ); } break; case self::HTTP_METHOD_POST: curl_setopt( $ch , CURLOPT_POST , 1 ); if( count($this->params) > 0 ) { curl_setopt( $ch , CURLOPT_POSTFIELDS , http_build_query($this->params) ); } break; } curl_setopt( $ch , CURLOPT_TIMEOUT , $this->getTimeout() ); curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 ); curl_setopt( $ch , CURLOPT_HTTPHEADER , $this->headers ); curl_setopt( $ch , CURLOPT_VERBOSE , 0 ); $response = curl_exec($ch); curl_close($ch); return $response; } } $rest = new RestInterface(); $rest->setMethod( RestInterface::HTTP_METHOD_GET ); $rest->setEndpoint( 'http://www.openlinksw.com/dataspace/person/kidehen@openlinksw.com' ); $rest->addHeader( 'Accept' , 'application/rdf+xml, text/n3, text/rdf+n3, text/turtle, application/x-turtle, application/turtle, text/plain' ); echo $rest->sendRequest();