[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Fmsystem-commits] [7002] merge from bim-branch
From: |
Sigurd Nes |
Subject: |
[Fmsystem-commits] [7002] merge from bim-branch |
Date: |
Wed, 16 Feb 2011 09:29:51 +0000 |
Revision: 7002
http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=7002
Author: sigurdne
Date: 2011-02-16 09:29:51 +0000 (Wed, 16 Feb 2011)
Log Message:
-----------
merge from bim-branch
Added Paths:
-----------
trunk/bim/inc/class.restrequest.inc.php
Copied: trunk/bim/inc/class.restrequest.inc.php (from rev 7001,
branches/dev-bim2/property/inc/class.restrequest.inc.php)
===================================================================
--- trunk/bim/inc/class.restrequest.inc.php (rev 0)
+++ trunk/bim/inc/class.restrequest.inc.php 2011-02-16 09:29:51 UTC (rev
7002)
@@ -0,0 +1,257 @@
+<?php
+
+class RestRequest
+{
+ protected $url;
+ protected $verb;
+ protected $requestBody;
+ protected $requestLength;
+ protected $username;
+ protected $password;
+ protected $acceptType;
+ protected $responseBody;
+ protected $responseInfo;
+ protected $localFile;
+ protected $error = false;
+ public $debug = false;
+
+ public function __construct ($url = null, $verb = 'GET', $requestBody =
null, $debug = false)
+ {
+ $this->url = $url;
+ $this->verb = $verb;
+ $this->requestBody = $requestBody;
+ $this->requestLength = 0;
+ $this->username = null;
+ $this->password = null;
+ $this->acceptType = 'application/json';
+ $this->responseBody = null;
+ $this->responseInfo = null;
+ $this->debug = $debug;
+ if($this->debug) {
+ echo "Request created\n".
+ "URL:".$url."\n".
+ "Method:".$verb."\n";
+ }
+ /*if ($this->requestBody !== null)
+ {
+ $this->buildPostBody();
+ }*/
+ }
+
+ public function flush ()
+ {
+ $this->requestBody = null;
+ $this->requestLength = 0;
+ $this->verb = 'GET';
+ $this->responseBody = null;
+ $this->responseInfo = null;
+ }
+
+ public function execute ()
+ {
+ $ch = curl_init();
+ $this->setAuth($ch);
+
+ try
+ {
+ switch (strtoupper($this->verb))
+ {
+ case 'GET':
+ $this->executeGet($ch);
+ break;
+ case 'POST':
+ $this->executePost($ch);
+ break;
+ case 'PUT':
+ $this->executePut($ch);
+ break;
+ case 'DELETE':
+ $this->executeDelete($ch);
+ break;
+ default:
+ throw new
InvalidArgumentException('Current verb (' . $this->verb . ') is an invalid REST
verb.');
+ }
+ }
+ catch (InvalidArgumentException $e)
+ {
+ curl_close($ch);
+ throw $e;
+ }
+ catch (Exception $e)
+ {
+ curl_close($ch);
+ throw $e;
+ }
+
+ }
+
+ public function buildPostBody ($data = null)
+ {
+ $data = ($data !== null) ? $data : $this->requestBody;
+
+ if (!is_array($data))
+ {
+ throw new InvalidArgumentException('Invalid data input
for postBody. Array expected');
+ }
+
+ $data = http_build_query($data, '', '&');
+ $this->requestBody = $data;
+ }
+
+
+
+ protected function executeGet ($ch)
+ {
+ $this->doExecute($ch);
+ }
+
+ protected function executePost ($ch)
+ {
+ if (!is_string($this->requestBody))
+ {
+ //$this->buildPostBody();
+ }
+ //var_dump($this->requestBody);
+ curl_setopt($ch, CURLOPT_POST, 1); // this line MUST COME
BEFORE the CURLOPT_POSTFIELDS line !!!!
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $this->requestBody); //
this automatically sets Content-Type: multipart/form-data
+ //n.b. the input MUST be an array where one element is of the
form '<file_field>' => @/<path>/filename
+ $this->doExecute($ch);
+ }
+
+ protected function executePut ($ch)
+ {
+ /*if (!is_string($this->requestBody))
+ {
+ $this->buildPostBody();
+ }
+
+ $this->requestLength = strlen($this->requestBody);
+
+ $fh = fopen('php://memory', 'rw');
+ fwrite($fh, $this->requestBody);
+ rewind($fh);*/
+ if( !file_exists($this->localFile)) {
+ throw new InvalidArgumentException("Missing file to
send with put request");
+ }
+ $fp = fopen ($this->localfile, "r");
+ $fileSize = filesize($fp);
+ curl_setopt($ch, CURLOPT_INFILE, $fh);
+ curl_setopt($ch, CURLOPT_INFILESIZE, $fileSize);
+ curl_setopt($ch, CURLOPT_PUT, true);
+
+ $this->doExecute($ch);
+
+ fclose($fh);
+ }
+
+ protected function executeDelete ($ch)
+ {
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
+
+ $this->doExecute($ch);
+ }
+
+ protected function doExecute (&$curlHandle)
+ {
+ $this->setCurlOpts($curlHandle);
+ $this->responseBody = curl_exec($curlHandle);
+ $this->responseInfo = curl_getinfo($curlHandle);
+ if ( $this->responseInfo["http_code"] != 200 ) {
+ $this->error = true;
+ } else {
+ $this->error = false;
+ }
+ curl_close($curlHandle);
+ }
+
+ protected function setCurlOpts (&$curlHandle)
+ {
+ curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10); // (seconds)
need long timeout because of large file uploads
+ curl_setopt($curlHandle, CURLOPT_CONNECTTIMEOUT, 10);
+
+ curl_setopt($curlHandle, CURLOPT_URL, $this->url);
+ curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
+ $headerArray = array ('Accept: ' . $this->acceptType);
+ //curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headerArray);
+ curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true);
+ }
+
+ protected function setAuth (&$curlHandle)
+ {
+ if ($this->username !== null && $this->password !== null)
+ {
+ curl_setopt($curlHandle, CURLOPT_HTTPAUTH,
CURLAUTH_DIGEST);
+ curl_setopt($curlHandle, CURLOPT_USERPWD,
$this->username . ':' . $this->password);
+ }
+ }
+
+ public function getAcceptType ()
+ {
+ return $this->acceptType;
+ }
+
+ public function setAcceptType ($acceptType)
+ {
+ $this->acceptType = $acceptType;
+ }
+
+ public function getPassword ()
+ {
+ return $this->password;
+ }
+
+ public function setPassword ($password)
+ {
+ $this->password = $password;
+ }
+
+ public function getResponseBody ()
+ {
+ return $this->responseBody;
+ }
+
+ public function getResponseInfo ()
+ {
+ return $this->responseInfo;
+ }
+
+ public function getUrl ()
+ {
+ return $this->url;
+ }
+
+ public function setUrl ($url)
+ {
+ $this->url = $url;
+ }
+
+ public function getUsername ()
+ {
+ return $this->username;
+ }
+
+ public function setUsername ($username)
+ {
+ $this->username = $username;
+ }
+
+ public function getVerb ()
+ {
+ return $this->verb;
+ }
+
+ public function setVerb ($verb)
+ {
+ $this->verb = $verb;
+ }
+
+ public function setLocalFile ( $filename) {
+ $this->localFile = $filename;
+ }
+ public function getLocalFile () {
+ return $this->localFile;
+ }
+ public function isError() {
+ return $this->error;
+ }
+}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Fmsystem-commits] [7002] merge from bim-branch,
Sigurd Nes <=