From 45b22c780a54010c8a170a2e5a4903c966ab8e22 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Wed, 1 May 2019 20:38:49 +0200 Subject: [PATCH] Use Response as response --- Message/Http/Header.php | 4 ++-- Message/Http/Rest.php | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/Message/Http/Header.php b/Message/Http/Header.php index 3d0402f2d..0d2eade11 100644 --- a/Message/Http/Header.php +++ b/Message/Http/Header.php @@ -228,9 +228,9 @@ final class Header extends HeaderAbstract * * @since 1.0.0 */ - public function get(string $key) : array + public function get(string $key = null) : array { - return $this->header[\strtolower($key)] ?? []; + return $key === null ? $this->header : ($this->header[\strtolower($key)] ?? []); } /** diff --git a/Message/Http/Rest.php b/Message/Http/Rest.php index 8adada671..36201ff79 100644 --- a/Message/Http/Rest.php +++ b/Message/Http/Rest.php @@ -36,7 +36,7 @@ final class Rest * * @since 1.0.0 */ - public static function request(Request $request) : string + public static function request(Request $request) : Response { $curl = \curl_init(); @@ -45,7 +45,14 @@ final class Rest } \curl_setopt($curl, \CURLOPT_NOBODY, true); - \curl_setopt($curl, \CURLOPT_HEADER, false); + + $headers = $request->getHeader()->get(); + foreach ($headers as $key => $header) { + $headers[$key] = $key . ': ' . \implode('', $header); + } + + curl_setopt($curl, \CURLOPT_HTTPHEADER, $headers); + \curl_setopt($curl, \CURLOPT_HEADER, true); switch ($request->getMethod()) { case RequestMethod::GET: @@ -72,6 +79,27 @@ final class Rest \curl_setopt($curl, \CURLOPT_USERPWD, $request->getUri()->getUserInfo()); } + $cHeaderString = ''; + $response = new Response(); + + curl_setopt($curl, \CURLOPT_HEADERFUNCTION, + function($curl, $header) use ($response, &$cHeaderString) { + $cHeaderString .= $header; + + $length = \strlen($header); + $header = \explode(':', $header, 2); + + if (\count($header) < 2) { + return $length; + } + + $name = \strtolower(\trim($header[0])); + $response->getHeader()->set($name, \trim($header[1])); + + return $length; + } + ); + \curl_setopt($curl, \CURLOPT_URL, $request->__toString()); \curl_setopt($curl, \CURLOPT_RETURNTRANSFER, 1); @@ -79,6 +107,8 @@ final class Rest \curl_close($curl); - return \is_bool($result) ? '' : $result; + $response->set('', \substr($result, \strlen($cHeaderString))); + + return $response; } }