diff --git a/http-server/Constrict/Request.php b/http-server/Constrict/Request.php index 2d9397c0..68b25cc2 100644 --- a/http-server/Constrict/Request.php +++ b/http-server/Constrict/Request.php @@ -3,7 +3,7 @@ namespace Server\Constrict; use Http\Context\Context; -use Server\Message\Request as Psr7Request; +use Server\Message\Request as RequestMessage; use Http\Context\Response; use Kiri\Kiri; use ReflectionException; @@ -11,7 +11,7 @@ use Server\RequestInterface; /** - * @mixin Psr7Request + * @mixin RequestMessage */ class Request implements RequestInterface { @@ -24,10 +24,10 @@ class Request implements RequestInterface */ public function __call($name, $args) { - if (!Context::hasContext(Psr7Request::class)) { - $request = Context::setContext(Psr7Request::class, new Psr7Request()); + if (!Context::hasContext(RequestMessage::class)) { + $request = Context::setContext(RequestMessage::class, new RequestMessage()); } else { - $request = Context::getContext(Psr7Request::class); + $request = Context::getContext(RequestMessage::class); } if (property_exists($request, $name)) { return $request->{$name}; @@ -43,7 +43,7 @@ class Request implements RequestInterface public function __get($name): mixed { // TODO: Change the autogenerated stub - return Context::getContext(Psr7Request::class)->{$name}; + return Context::getContext(RequestMessage::class)->{$name}; } @@ -56,7 +56,7 @@ class Request implements RequestInterface { Context::setContext(Response::class, new Response()); - Context::setContext(Psr7Request::class, Psr7Request::parseRequest($request)); + Context::setContext(RequestMessage::class, RequestMessage::parseRequest($request)); return Kiri::getDi()->get(Request::class); } diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index 65984b56..6e712132 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -59,8 +59,42 @@ class Request implements RequestInterface $message->serverRequest = $request; $message->version = $request->server['server_protocol']; $message->stream = new Stream($request->getContent()); - $message->headers = $request->header; - return $message; + return $message->parseHeaders($request); + } + + + /** + * @param \Swoole\Http\Request $request + * @return $this + */ + private function parseHeaders(\Swoole\Http\Request $request): static + { + foreach ($request->header as $key => $value) { + $this->addHeader($key, $value); + } + + $index = strpos("\r\n\r\n", $request->getData()); + $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; + } }