117 lines
4.1 KiB
PHP
117 lines
4.1 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
define('PATH_SEP', '/');
|
||
|
|
define('COLON', ':');
|
||
|
|
define('DOT', '.');
|
||
|
|
define('PROTOCOL_HTTP', 'http');
|
||
|
|
|
||
|
|
// Abstract class, containing the CURL functionality, used to handle GET, POST, PUT and DELETE http methods.
|
||
|
|
abstract class CURLMessage
|
||
|
|
{
|
||
|
|
var $restServer; // e.g. "http://ralph.pmos.colosa.net/rest/ralph/"; host + technich dir + user dir
|
||
|
|
var $content = "Content-Type: application/"; //set the string used to attach next the kind of message to be handle.
|
||
|
|
var $serviceTechnic = "rest";// name of the current durectory where the rest methods are.
|
||
|
|
var $server_method; // used to set the name of the remote host and the Rest method to be called.
|
||
|
|
var $type; // contains the type of the message.
|
||
|
|
var $ch; //curl handle instance.
|
||
|
|
var $output; // contains the output returned by the curl_exec function.
|
||
|
|
|
||
|
|
function __construct()
|
||
|
|
{
|
||
|
|
$serverDNS = explode( DOT , $_SERVER['SERVER_NAME']);
|
||
|
|
$serverDNS = array_reverse($serverDNS);
|
||
|
|
$user = array_pop($serverDNS); //***aware this must contains user logged or enviroment name***
|
||
|
|
|
||
|
|
$this->restServer = PROTOCOL_HTTP.COLON.PATH_SEP.PATH_SEP;
|
||
|
|
$this->restServer .= $_SERVER['SERVER_NAME'].PATH_SEP;
|
||
|
|
$this->restServer .= $this->serviceTechnic.PATH_SEP.$user.PATH_SEP;
|
||
|
|
|
||
|
|
$this->ch = curl_init();
|
||
|
|
curl_setopt( $this->ch, CURLOPT_TIMEOUT, 2);
|
||
|
|
curl_setopt( $this->ch, CURLOPT_POST, 1);
|
||
|
|
curl_setopt( $this->ch, CURLOPT_RETURNTRANSFER, 1);
|
||
|
|
}
|
||
|
|
//set the message in order to follow the message format
|
||
|
|
abstract protected function format( array $message);
|
||
|
|
|
||
|
|
//Set properties used in a simpleMessage Class like a set in a URI, or formatted as a JSon msg.
|
||
|
|
abstract protected function setMoreProperties( $messageFormated);
|
||
|
|
|
||
|
|
//attach the method to the restServer path, set the type of the message, and the message itself.
|
||
|
|
protected function setMessageProperties( $method, array $message)
|
||
|
|
{
|
||
|
|
$messageFormated = $this->format( $message);
|
||
|
|
$this->server_method = $this->restServer . $method;
|
||
|
|
$this->setMoreProperties( $messageFormated);
|
||
|
|
}
|
||
|
|
//Send or execute(curl notation) the message using a rest method
|
||
|
|
public function send( $method, array $message)
|
||
|
|
{
|
||
|
|
self::setMessageProperties( $method, $message);
|
||
|
|
$this->output = curl_exec( $this->ch);
|
||
|
|
return $this->output;
|
||
|
|
}
|
||
|
|
//set the message to GET method type
|
||
|
|
public function sendGET( $method, array $message)
|
||
|
|
{
|
||
|
|
curl_setopt($this->ch, CURLOPT_HTTPGET, true);
|
||
|
|
return $this->send( $method, $message);
|
||
|
|
}
|
||
|
|
//set the message to POST method type
|
||
|
|
public function sendPOST( $method, array $message)
|
||
|
|
{
|
||
|
|
curl_setopt($this->ch, CURLOPT_POST, true);
|
||
|
|
return $this->send( $method, $message);
|
||
|
|
}
|
||
|
|
//set the message to PUT method type
|
||
|
|
public function sendPUT( $method, array $message)
|
||
|
|
{
|
||
|
|
curl_setopt($this->ch, CURLOPT_PUT, true);
|
||
|
|
return $this->send( $method, $message);
|
||
|
|
}
|
||
|
|
//set the message to DELETE method type
|
||
|
|
public function sendDELETE( $method, array $message)
|
||
|
|
{
|
||
|
|
curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, "DELETE");
|
||
|
|
return $this->send( $method, $message);
|
||
|
|
}
|
||
|
|
//Display all the data that the response could got.
|
||
|
|
public function displayResponse()
|
||
|
|
{
|
||
|
|
$error = curl_error($this->ch);
|
||
|
|
$result = array( 'header' => '',
|
||
|
|
'body' => '',
|
||
|
|
'curl_error' => '',
|
||
|
|
'http_code' => '',
|
||
|
|
'last_url' => '');
|
||
|
|
if ( $error != "" )
|
||
|
|
{
|
||
|
|
$result['curl_error'] = $error;
|
||
|
|
return $result;
|
||
|
|
}
|
||
|
|
$response = $this->output;
|
||
|
|
$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);
|
||
|
|
|
||
|
|
echo $this->type." Response: ".$response."<BR>";
|
||
|
|
foreach($result as $index => $data)
|
||
|
|
{
|
||
|
|
if( $data != "")
|
||
|
|
{
|
||
|
|
echo $index."=".$data."<BR>";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
echo "<BR>";
|
||
|
|
}
|
||
|
|
//Close the Curl session using the Curl Handle set by curl_init() function.
|
||
|
|
public function close()
|
||
|
|
{
|
||
|
|
curl_close( $this->ch);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
?>
|