diff --git a/http-server/Message/Headers.php b/http-server/Message/Headers.php new file mode 100644 index 00000000..8ccd0a29 --- /dev/null +++ b/http-server/Message/Headers.php @@ -0,0 +1,44 @@ +headers = $headers; + return $class; + } + + + /** + * @param $name + * @param null $default + * @return string|array|float|int|null + */ + public function get($name, $default = null): string|array|float|int|null + { + return $this->headers[$name] ?? $default; + } + + + /** + * @return array + */ + public function toArray(): array + { + return $this->headers; + } + + +} diff --git a/http-server/Message/Message.php b/http-server/Message/Message.php index 3adb38ea..6c153eca 100644 --- a/http-server/Message/Message.php +++ b/http-server/Message/Message.php @@ -4,7 +4,9 @@ namespace Server\Message; use JetBrains\PhpStorm\Pure; use Kiri\Core\Xml; +use Kiri\Kiri; use Psr\Http\Message\StreamInterface; +use ReflectionException; /** @@ -76,6 +78,40 @@ trait Message } + /** + * @param \Swoole\Http\Request $request + * @return $this + * @throws ReflectionException + */ + private function parseRequestHeaders(\Swoole\Http\Request $request): static + { + $index = strpos($request->getData(), "\r\n\r\n"); + $headers = explode("\r\n", substr($request->getData(), 0, $index)); + + array_shift($headers); + foreach ($headers as $header) { + [$key, $value] = explode(': ', $header); + $this->addRequestHeader($key, $value); + } + $class = Kiri::getDi()->get(Headers::class); + $this->header = $class->withHeader($this->headers); + return $this; + } + + + /** + * @param $key + * @param $value + */ + private function addRequestHeader($key, $value) + { + $this->headers[$key] = []; + foreach (explode(';', $value) as $item) { + $this->headers[$key][] = $item; + } + } + + /** * @param $name * @return string|null diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index 74c09396..b0bfa098 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -2,10 +2,12 @@ namespace Server\Message; +use Annotation\Inject; use BadMethodCallException; use JetBrains\PhpStorm\Pure; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\UriInterface; +use ReflectionException; /** @@ -23,6 +25,9 @@ class Request implements RequestInterface public string $method; + public Headers $header; + + /** * @var Uri */ @@ -49,6 +54,7 @@ class Request implements RequestInterface /** * @param \Swoole\Http\Request $request * @return RequestInterface + * @throws ReflectionException */ public static function parseRequest(\Swoole\Http\Request $request): RequestInterface { @@ -60,38 +66,7 @@ class Request implements RequestInterface $message->version = $request->server['server_protocol']; $message->stream = new Stream($request->getContent()); $message->servers = $request->server; - return $message->parseHeaders($request); - } - - - /** - * @param \Swoole\Http\Request $request - * @return $this - */ - private function parseHeaders(\Swoole\Http\Request $request): static - { - $index = strpos($request->getData(), "\r\n\r\n"); - $headers = explode("\r\n", substr($request->getData(), 0, $index)); - - array_shift($headers); - foreach ($headers as $header) { - [$key, $value] = explode(': ', $header); - $this->addHeader($key, $value); - } - return $this; - } - - - /** - * @param $key - * @param $value - */ - private function addHeader($key, $value) - { - $this->headers[$key] = []; - foreach (explode(';', $value) as $item) { - $this->headers[$key][] = $item; - } + return $message->parseRequestHeaders($request); }