Example #1
0
 /**
  * @param Request $request
  * @return Response
  */
 public function call(Request $request)
 {
     // Create cURL
     $ch = curl_init();
     // Set-up URL
     curl_setopt($ch, CURLOPT_URL, $request->getUrl());
     // Set-up headers
     $headers = $request->getHeaders();
     array_walk($headers, function (&$item, $key) {
         $item = "{$key}: {$item}";
     });
     curl_setopt($ch, CURLOPT_HTTPHEADER, array_values($headers));
     // Set-up others
     curl_setopt_array($ch, $request->getOpts());
     // Receive result
     $result = curl_exec($ch);
     // Parse response
     $response = new Response();
     if ($result === FALSE) {
         $response->setError(curl_strerror(curl_errno($ch)));
         $response->setData(FALSE);
         $response->setCode(curl_errno($ch));
         $response->setHeaders(curl_getinfo($ch));
     } else {
         $response->setData(json_decode($result));
         $response->setCode(curl_getinfo($ch, CURLINFO_HTTP_CODE));
         $response->setHeaders(curl_getinfo($ch));
     }
     // Close cURL
     curl_close($ch);
     return $response;
 }
 /** @dataProvider provideSetError */
 public function testSetError($expected, $statusCode, $error, $error_description = null, $error_uri = null)
 {
     $response = new Response();
     $response->setError($statusCode, $error, $error_description, $error_uri);
     $this->assertEquals($expected, $response->getContent());
     $this->assertEquals($statusCode, $response->getStatusCode());
 }
Example #3
0
 public function testSetError()
 {
     $response = new Response();
     $response->setError("DEFAULT_ERROR", "DEFAULT_ERROR_DETAIL");
     $error = $response->getError(true);
     $this->assertEquals('DEFAULT_ERROR', $error['error']);
     $this->assertEquals('DEFAULT_ERROR_DETAIL', $error["errorDetail"]);
 }
 public function testSetError()
 {
     $error = "ERROR_TEST";
     $errorDetail = 1;
     $response = new Response();
     $response->setError($error, $errorDetail);
     $this->assertFalse($response->isOk());
     $this->assertEquals($error, $response->getError());
     $errorRes = $response->getError(true);
     $this->assertEquals($errorDetail, $errorRes['errorDetail']);
 }
 /**
  * Execute an SQL select query and generate Response object
  * @param  string $type   [description]
  * @param  string $sql SQL string to execute
  * @param  bool $isSingle Whether only one record should be returned
  * @return Response $response Generated Response object
  */
 public function doQueryResponse(Response $response, $sql, $type, $isSingle = false)
 {
     try {
         // Execute the query
         $result = $this->doQuery($sql, $isSingle);
         // Save the data to the response object
         $response->setData($type, $result);
     } catch (\Rapi\PDOException $e) {
         // Save the PDO error to the response
         $response->setError($e->getCode(), $e->getMessage());
     }
     return $response;
 }
 public static function enforceRequestLimit($limit)
 {
     $response = new Response();
     try {
         $db = PDO::getConnection();
         $stmt = $db->prepare('select count(cmd) as num from ' . $GLOBALS['table_prefix'] . 'restapi_request_log where date > date_sub(now(),interval 1 minute)');
         $stmt->execute();
         $result = $stmt->fetch(PDO::FETCH_OBJ);
         if ($result->num > $limit) {
             $response->outputErrorMessage('Too many requests. Requests are limited to ' . $limit . ' per minute');
             die(0);
         }
     } catch (\Exception $e) {
         $response->setError($e->getCode(), $e->getMessage());
     }
 }
Example #7
0
 /**
  * Execute the query
  *
  * @return Response
  */
 private function exec()
 {
     $ch = $this->init();
     // Collect response data
     $response = new Response(['response' => curl_exec($ch), 'options' => $this->_options, 'info' => curl_getinfo($ch)]);
     $errno = curl_errno($ch);
     if ($errno) {
         $response->setError([$errno => curl_error($ch)]);
     }
     curl_close($ch);
     return $response;
 }
Example #8
0
 /**
  * 原始发送请求
  * @param string $url 完整URL
  * @param string|array $bodyParam body请求体。$requestMethod为POST时有效
  * @param string $requestMethod 请求方法,必须全大写
  * @param Response $response
  * @return Response $response
  */
 public function rawSend($url, $bodyParam = null, $requestMethod = 'GET', Response $response = null)
 {
     if (null === $response) {
         $response = new Response();
     }
     if (null === $this->curlInit) {
         $this->curlInit = curl_init();
     }
     $curlOpt = $this->getDefaultCurlOpt();
     $curlOpt[CURLOPT_URL] = $url;
     if ($requestMethod == 'POST') {
         $curlOpt[CURLOPT_POST] = true;
     }
     $curlOpt[CURLOPT_CUSTOMREQUEST] = $requestMethod;
     if ($requestMethod == 'POST' || $requestMethod == 'PUT') {
         if (is_array($bodyParam)) {
             if (!$this->rawSendCheckHasFile($bodyParam)) {
                 $bodyParam = http_build_query($bodyParam);
             } else {
                 $bodyParam = $this->rawSendBuildCleanUploadBody($bodyParam);
             }
         }
         if ($bodyParam !== null && $bodyParam !== "") {
             $curlOpt[CURLOPT_POSTFIELDS] = $bodyParam;
         } else {
             $curlOpt[CURLOPT_POSTFIELDS] = "";
         }
     }
     curl_setopt_array($this->curlInit, $curlOpt);
     $rawResult = curl_exec($this->curlInit);
     $curlInfo = curl_getinfo($this->curlInit);
     $curl_errno = curl_errno($this->curlInit);
     if ($curl_errno) {
         $response->setError("CURL_ERROR", curl_error($this->curlInit) . '[ErrCode ' . $curl_errno . ']');
     } else {
         $response->create($curlInfo['http_code'], $rawResult);
     }
     $response->setExtractInfo($curlInfo);
     if (!empty($this->requestLoggerStack)) {
         $this->dispatchRequestLogger($url, isset($curlOpt[CURLOPT_POSTFIELDS]) ? $curlOpt[CURLOPT_POSTFIELDS] : null, $requestMethod, $response);
     }
     return $response;
 }
 /**
  * Generate and output an error response from an error message
  * @note Wraps other error handling methods for convenience
  * @param string $message Error message
  */
 static function outputErrorMessage($message)
 {
     $response = new Response();
     $response->setError(0, $message);
     $response->output();
 }
Example #10
0
 /**
  * 分发请求到对象的方法
  */
 public function dispatch($handler, $require_oauth = false, $request = null)
 {
     // 检查handler
     if (!is_string($handler)) {
         throw new PrismException('No handler given to dispatcher');
     }
     // 创建Request和Response
     if (!$request) {
         $request = new Request();
     }
     $response = new Response($request->getRequestID());
     // oauth判断
     if ($require_oauth && !$request->getOauth()) {
         $response->setError('Invalid Request', 'Oauth is required')->send();
     }
     // 使用middlewares
     foreach ($this->middlewares as $middleware) {
         list($class_name, $action_name) = explode('@', $middleware);
         call_user_func(array(new $class_name(), $action_name), $request, $response);
     }
     // 清理不需要的params
     if ($this->routing_key) {
         unset($request->params[$this->routing_key]);
     }
     // 解析对象名和方法名
     list($class_name, $action_name) = explode('@', $handler);
     // 执行方法
     call_user_func(array(new $class_name(), $action_name), $request, $response);
 }