Overview

Namespaces

  • Genetsis
    • core
      • activityid
      • user
  • None

Classes

  • Genetsis\ActivityApi
  • Genetsis\AutoloaderClass
  • Genetsis\Config
  • Genetsis\core\AccessToken
  • Genetsis\core\activityid\Address
  • Genetsis\core\activityid\ContextType
  • Genetsis\core\activityid\Device
  • Genetsis\core\activityid\Location
  • Genetsis\core\activityid\ObjectType
  • Genetsis\core\activityid\Position
  • Genetsis\core\activityid\QualityType
  • Genetsis\core\activityid\Request
  • Genetsis\core\activityid\Response
  • Genetsis\core\activityid\SocialNetwork
  • Genetsis\core\activityid\Verbs
  • Genetsis\core\ClientToken
  • Genetsis\core\Encryption
  • Genetsis\core\FileCache
  • Genetsis\core\LogConfig
  • Genetsis\core\LoginStatus
  • Genetsis\core\LoginStatusType
  • Genetsis\core\OAuth
  • Genetsis\core\OAuthConfig
  • Genetsis\core\OauthTemplate
  • Genetsis\core\RefreshToken
  • Genetsis\core\Request
  • Genetsis\core\StoredToken
  • Genetsis\core\Things
  • Genetsis\core\User
  • Genetsis\core\user\Brand
  • Genetsis\core\user\QueryUserData
  • Genetsis\Identity
  • Genetsis\URLBuilder
  • Genetsis\UserApi
  • Logger
  • LoggerAppender
  • LoggerAppenderConsole
  • LoggerAppenderDailyFile
  • LoggerAppenderDailyRollingFile
  • LoggerAppenderEcho
  • LoggerAppenderFile
  • LoggerAppenderFirePHP
  • LoggerAppenderMail
  • LoggerAppenderMailEvent
  • LoggerAppenderMongoDB
  • LoggerAppenderNull
  • LoggerAppenderPDO
  • LoggerAppenderPhp
  • LoggerAppenderPool
  • LoggerAppenderRollingFile
  • LoggerAppenderSocket
  • LoggerAppenderSyslog
  • LoggerAutoloader
  • LoggerConfigurable
  • LoggerConfigurationAdapterINI
  • LoggerConfigurationAdapterPHP
  • LoggerConfigurationAdapterXML
  • LoggerConfiguratorDefault
  • LoggerFilter
  • LoggerFilterDenyAll
  • LoggerFilterLevelMatch
  • LoggerFilterLevelRange
  • LoggerFilterStringMatch
  • LoggerFormattingInfo
  • LoggerHierarchy
  • LoggerLayout
  • LoggerLayoutHtml
  • LoggerLayoutPattern
  • LoggerLayoutSerialized
  • LoggerLayoutSimple
  • LoggerLayoutTTCC
  • LoggerLayoutXml
  • LoggerLevel
  • LoggerLocationInfo
  • LoggerLoggingEvent
  • LoggerMDC
  • LoggerNDC
  • LoggerOptionConverter
  • LoggerPatternConverter
  • LoggerPatternConverterClass
  • LoggerPatternConverterCookie
  • LoggerPatternConverterDate
  • LoggerPatternConverterEnvironment
  • LoggerPatternConverterFile
  • LoggerPatternConverterLevel
  • LoggerPatternConverterLine
  • LoggerPatternConverterLiteral
  • LoggerPatternConverterLocation
  • LoggerPatternConverterLogger
  • LoggerPatternConverterMDC
  • LoggerPatternConverterMessage
  • LoggerPatternConverterMethod
  • LoggerPatternConverterNDC
  • LoggerPatternConverterNewLine
  • LoggerPatternConverterProcess
  • LoggerPatternConverterRelative
  • LoggerPatternConverterRequest
  • LoggerPatternConverterServer
  • LoggerPatternConverterSession
  • LoggerPatternConverterSessionID
  • LoggerPatternConverterSuperglobal
  • LoggerPatternConverterThrowable
  • LoggerPatternParser
  • LoggerReflectionUtils
  • LoggerRendererDefault
  • LoggerRendererException
  • LoggerRendererMap
  • LoggerRoot
  • LoggerThrowableInformation
  • LoggerUtils

Interfaces

  • Genetsis\core\iTokenTypes
  • LoggerConfigurationAdapter
  • LoggerConfigurator
  • LoggerRenderer

Exceptions

  • Genetsis\core\InvalidGrantException
  • LoggerException
  • Overview
  • Namespace
  • Class
  1: <?php
  2: namespace Genetsis\core;
  3: 
  4: use \Exception;
  5: use Genetsis\Config;
  6: use Genetsis\Identity;
  7: use Genetsis\Logger;
  8: 
  9: 
 10: class Request
 11: {
 12:     /** Http Methods */
 13:     const HTTP_POST = 'POST';
 14:     const HTTP_PUT = 'PUT';
 15:     const HTTP_GET = 'GET';
 16:     const HTTP_DELETE = 'DELETE';
 17:     const HTTP_HEAD = 'HEAD';
 18: 
 19:     const SECURED = true;
 20:     const NOT_SECURED = false;
 21:     /**
 22:      * @param string $url Endpoint where the request is sent. Without params.
 23:      * @param array $parameters mixed Associative vector with request params. Use key as param name, and value as value. The values shouldn't be prepared.
 24:      * @param string $http_method string HTTP method. One of them:
 25:      *        - {@link self::HTTP_GET}
 26:      *        - {@link self::HTTP_POST}
 27:      *        - {@link self::HTTP_METHOD_HEAD}
 28:      *        - {@link self::HTTP_METHOD_PUT}
 29:      *        - {@link self::HTTP_METHOD_DELETE}
 30:      * @param bool $credentials If true, client_id and client_secret are included in params
 31:      * @param array $http_headers A vector of strings with HTTP headers or FALSE if no additional headers to sent.
 32:      * @param array $cookies A vector of strings with cookie data or FALSE if no cookies to sent. One line per cookie ("key=value"), without trailing semicolon.
 33:      * @return array An associative array with that items:
 34:      *     - result: An string or array on success, or FALSE if there is no result.
 35:      *     - code: HTTP code.
 36:      *     - content-type: Content-type related to result
 37:      * @throws \Exception If there is an error.
 38:      */
 39:     public static function execute($url, $parameters = array(), $http_method = self::HTTP_GET, $credentials = self::NOT_SECURED, $http_headers = array(), $cookies = array())
 40:     {
 41:         if (!extension_loaded('curl')) {
 42:             throw new Exception('The PHP extension curl must be installed to use this library.');
 43:         }
 44: 
 45:         if (($url = trim($url)) == '') {
 46:             return array(
 47:                 'result' => false,
 48:                 'code' => 0,
 49:                 'content_type' => ''
 50:             );
 51:         }
 52:         $is_ssl = (preg_match('#^https#Usi', $url)) ? true : false;
 53: 
 54:         $curl_options = array(
 55:             CURLOPT_RETURNTRANSFER => true,
 56:             CURLOPT_CUSTOMREQUEST => $http_method,
 57:             CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT']
 58:         );
 59: 
 60:         if ($is_ssl) {
 61:             $curl_options[CURLOPT_SSL_VERIFYPEER] = false;
 62:             $curl_options[CURLOPT_SSL_VERIFYHOST] = 0;
 63:         } else {
 64:             $curl_options[CURLOPT_SSL_VERIFYPEER] = true;
 65:         }
 66: 
 67:         if ($credentials) {
 68:             $parameters['client_id'] = OAuthConfig::getClientId();
 69:             $parameters['client_secret'] = OAuthConfig::getClientSecret();
 70:         }
 71: 
 72:         switch ($http_method) {
 73:             case self::HTTP_POST:
 74:                 $curl_options[CURLOPT_POST] = true;
 75:                 // Check if parameters must to be in json format
 76:                 if (isset($http_headers['Content-Type'])
 77:                     && $http_headers['Content-Type'] == 'application/json'
 78:                     && !empty($parameters) && is_array($parameters)
 79:                 ) {
 80:                     //echo (json_encode($parameters));
 81:                     $curl_options[CURLOPT_POSTFIELDS] = json_encode($parameters);
 82:                 } // No Json format
 83:                 else {
 84:                     $curl_options[CURLOPT_POSTFIELDS] = http_build_query($parameters);
 85:                 }
 86:                 break;
 87: 
 88:             case self::HTTP_PUT:
 89:                 $curl_options[CURLOPT_POSTFIELDS] = http_build_query($parameters);
 90:                 break;
 91: 
 92:             case self::HTTP_HEAD:
 93:                 $curl_options[CURLOPT_NOBODY] = true;
 94:             /* No break */
 95:             case self::HTTP_DELETE:
 96:                 // Check if parameters are in json
 97:                 if (isset($http_headers['Content-Type'])
 98:                     && $http_headers['Content-Type'] == 'application/json'
 99:                     && !empty($parameters) && is_array($parameters)
100:                 ) {
101:                     $curl_options[CURLOPT_POSTFIELDS] = json_encode($parameters);
102:                 } // No Json format
103:                 else {
104:                     $url .= '?' . http_build_query($parameters, null, '&');
105:                 }
106:                 break;
107:             case self::HTTP_GET:
108:                 if (!empty($parameters)) {
109:                     $url .= '?' . http_build_query($parameters, null, '&');
110:                 }
111:                 break;
112:             default:
113:                 break;
114:         }
115: 
116:         $curl_options[CURLOPT_URL] = $url;
117: 
118:         // Cookies.
119:         if (is_array($cookies) && !empty($cookies)) {
120:             // Removes trailing semicolons, if exists.
121:             foreach ($cookies as $key => $value) {
122:                 $cookies[$key] = rtrim($value, ';');
123:             }
124:             $curl_options[CURLOPT_COOKIE] = implode('; ', $cookies);
125:         }
126: 
127:         // Prepare headers.
128:         if (is_array($http_headers) && !empty($http_headers)) {
129:             $header = array();
130:             foreach ($http_headers as $key => $parsed_urlvalue) {
131:                 $header[] = "$key: $parsed_urlvalue";
132:             }
133:             $curl_options[CURLOPT_HTTPHEADER] = $header;
134:         }
135: 
136:         // Send request.
137:         $ch = curl_init();
138:         curl_setopt_array($ch, $curl_options);
139:         $result = curl_exec($ch);
140:         $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
141:         $content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
142:         $total_time = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
143:         curl_close($ch);
144: 
145:         Identity::getLogger()->debug('### BEGIN REQUEST ###');
146:         Identity::getLogger()->debug(sprintf('URL -> [%s][%s] %s', $http_method, ($is_ssl ? 'ssl' : 'no ssl'), var_export($url, true)));
147:         Identity::getLogger()->debug('Params -> ' . var_export($parameters, true));
148:         Identity::getLogger()->debug('Headers -> ' . var_export($http_headers, true));
149:         Identity::getLogger()->debug(sprintf("Response -> [%s][%s]\n%s", $content_type, $http_code, var_export($result, true)));
150:         Identity::getLogger()->debug('Total Time -> ' . var_export($total_time, true));
151:         Identity::getLogger()->debug('### END REQUEST ###');
152: 
153:         return array(
154:             'result' => ($content_type === 'application/json') ? ((null === json_decode($result)) ? $result : json_decode($result)) : $result,
155:             'code' => $http_code,
156:             'content_type' => $content_type
157:         );
158:     }
159: } 
API documentation generated by ApiGen