예제 #1
0
 public function testBasePath()
 {
     HttpRequest::setBasePath('/foo/bar.php');
     $request = HttpRequest::create(array('REQUEST_URI' => '/foo/bar.php/test/path?foo=bar'));
     $this->assertEquals('/test/path?foo=bar', $request->getURI(), 'Automatic URI rebase');
     $this->assertEquals('/test/path', $request->getPath(), 'Automatic path rebase');
 }
예제 #2
0
 /**
  * Creates a new HttpRequest object based on the given data
  * @param array $requestData Data of the HTTP request
  * @return HttpRequest
  */
 public static function create(array $requestData = array())
 {
     $defaultValues = array('REQUEST_TIME' => time(), 'SERVER_PORT' => null, 'SERVER_NAME' => null, 'QUERY_STRING' => null, 'REMOTE_ADDR' => null, 'HTTP_USER_AGENT' => null, 'HTTPS' => null, 'REQUEST_URI' => null, 'HTTP_ACCEPT_LANGUAGE' => null, 'HTTP_ACCEPT_ENCODING' => null, 'REQUEST_METHOD' => null);
     $requestData = array_merge($defaultValues, $requestData);
     $httpRequest = new HttpRequest();
     $protocol = null;
     if ($requestData['HTTPS'] !== null) {
         $protocol = $requestData['HTTPS'] === 'on' ? HttpRequest::PROTOCOL_HTTPS : HttpRequest::PROTOCOL_HTTP;
     }
     $uri = StringUtils::startsWith($requestData['REQUEST_URI'], self::$basePath) ? StringUtils::afterFirst($requestData['REQUEST_URI'], self::$basePath) : $requestData['REQUEST_URI'];
     $path = StringUtils::beforeLast($uri, '?');
     $languages = array();
     $langRates = array_filter(explode(',', $requestData['HTTP_ACCEPT_LANGUAGE']));
     foreach ($langRates as $lr) {
         list($langCode, $importance) = array_pad(preg_split('/;(?:q=)?/', $lr), 2, 1.0);
         $languages[$langCode] = (double) $importance;
     }
     $acceptedEncoding = array_filter(array_map('trim', explode(',', $requestData['HTTP_ACCEPT_ENCODING'])));
     $requestTime = new \DateTime();
     $requestTime->setTimestamp($requestData['REQUEST_TIME']);
     $httpRequest->setHost($requestData['SERVER_NAME']);
     $httpRequest->setPath($path);
     $httpRequest->setPort($requestData['SERVER_PORT']);
     $httpRequest->setProtocol($protocol);
     $httpRequest->setQuery($requestData['QUERY_STRING']);
     $httpRequest->setURI($uri);
     $httpRequest->setRequestTime($requestTime);
     $httpRequest->setAcceptedEncodings($acceptedEncoding);
     $httpRequest->setRequestMethod($requestData['REQUEST_METHOD']);
     $httpRequest->setUserAgent($requestData['HTTP_USER_AGENT']);
     $httpRequest->setAcceptedLanguages($languages);
     $httpRequest->setRemoteAddress($requestData['REMOTE_ADDR']);
     $headers = array();
     foreach ($_SERVER as $name => $value) {
         if (StringUtils::startsWith($name, 'HTTP_') === true) {
             $name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))));
             $headers[$name] = $value;
         } elseif ($name == 'CONTENT_TYPE') {
             $headers['Content-Type'] = $value;
         } elseif ($name == 'CONTENT_LENGTH') {
             $headers['Content-Length'] = $value;
         }
     }
     $httpRequest->setHeaders($headers);
     return $httpRequest;
 }