Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. HttpClientKernel.php

class HttpClientKernel

An implementation of a Symfony HTTP kernel using a "real" HTTP client.

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

  • class \Symfony\Component\HttpKernel\HttpClientKernel implements \Symfony\Component\HttpKernel\HttpKernelInterface

Expanded class hierarchy of HttpClientKernel

File

vendor/symfony/http-kernel/HttpClientKernel.php, line 32

Namespace

Symfony\Component\HttpKernel
View source
final class HttpClientKernel implements HttpKernelInterface {
    private HttpClientInterface $client;
    public function __construct(?HttpClientInterface $client = null) {
        if (null === $client && !class_exists(HttpClient::class)) {
            throw new \LogicException(\sprintf('You cannot use "%s" as the HttpClient component is not installed. Try running "composer require symfony/http-client".', __CLASS__));
        }
        $this->client = $client ?? HttpClient::create();
    }
    public function handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true) : Response {
        $headers = $this->getHeaders($request);
        $body = '';
        if (null !== ($part = $this->getBody($request))) {
            $headers = array_merge($headers, $part->getPreparedHeaders()
                ->toArray());
            $body = $part->bodyToIterable();
        }
        $response = $this->client
            ->request($request->getMethod(), $request->getUri(), [
            'headers' => $headers,
            'body' => $body,
        ] + $request->attributes
            ->get('http_client_options', []));
        $response = new Response($response->getContent(!$catch), $response->getStatusCode(), $response->getHeaders(!$catch));
        $response->headers
            ->remove('X-Body-File');
        $response->headers
            ->remove('X-Body-Eval');
        $response->headers
            ->remove('X-Content-Digest');
        $response->headers = new class ($response->headers
            ->all()) extends ResponseHeaderBag {
            protected function computeCacheControlValue() : string {
                return $this->getCacheControlHeader();
                // preserve the original value
            }

};
        return $response;
    }
    private function getBody(Request $request) : ?AbstractPart {
        if (\in_array($request->getMethod(), [
            'GET',
            'HEAD',
        ])) {
            return null;
        }
        if (!class_exists(AbstractPart::class)) {
            throw new \LogicException('You cannot pass non-empty bodies as the Mime component is not installed. Try running "composer require symfony/mime".');
        }
        if ($content = $request->getContent()) {
            return new TextPart($content, 'utf-8', 'plain', '8bit');
        }
        $fields = $request->request
            ->all();
        foreach ($request->files
            ->all() as $name => $file) {
            $fields[$name] = DataPart::fromPath($file->getPathname(), $file->getClientOriginalName(), $file->getClientMimeType());
        }
        return new FormDataPart($fields);
    }
    private function getHeaders(Request $request) : array {
        $headers = [];
        foreach ($request->headers as $key => $value) {
            $headers[$key] = $value;
        }
        $cookies = [];
        foreach ($request->cookies
            ->all() as $name => $value) {
            $cookies[] = $name . '=' . $value;
        }
        if ($cookies) {
            $headers['cookie'] = implode('; ', $cookies);
        }
        return $headers;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
HttpClientKernel::$client private property
HttpClientKernel::getBody private function
HttpClientKernel::getHeaders private function
HttpClientKernel::handle public function Handles a Request to convert it to a Response. Overrides HttpKernelInterface::handle
HttpClientKernel::__construct public function
HttpKernelInterface::MAIN_REQUEST public constant
HttpKernelInterface::SUB_REQUEST public constant
RSS feed
Powered by Drupal