ClientFactory.php

Same filename in other branches
  1. 9 core/lib/Drupal/Core/Http/ClientFactory.php
  2. 8.9.x core/lib/Drupal/Core/Http/ClientFactory.php
  3. 11.x core/lib/Drupal/Core/Http/ClientFactory.php

Namespace

Drupal\Core\Http

File

core/lib/Drupal/Core/Http/ClientFactory.php

View source
<?php

namespace Drupal\Core\Http;

use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Site\Settings;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Utils;

/**
 * Helper class to construct a HTTP client with Drupal specific config.
 */
class ClientFactory {
    
    /**
     * The handler stack.
     *
     * @var \GuzzleHttp\HandlerStack
     */
    protected $stack;
    
    /**
     * Constructs a new ClientFactory instance.
     *
     * @param \GuzzleHttp\HandlerStack $stack
     *   The handler stack.
     */
    public function __construct(HandlerStack $stack) {
        $this->stack = $stack;
    }
    
    /**
     * Constructs a new client object from some configuration.
     *
     * @param array $config
     *   The config for the client.
     *
     * @return \GuzzleHttp\Client
     *   The HTTP client.
     */
    public function fromOptions(array $config = []) {
        $default_config = [
            // Security consideration: we must not use the certificate authority
            // file shipped with Guzzle because it can easily get outdated if a
            // certificate authority is hacked. Instead, we rely on the certificate
            // authority file provided by the operating system which is more likely
            // going to be updated in a timely fashion. This overrides the default
            // path to the pem file bundled with Guzzle.
'verify' => TRUE,
            'timeout' => 30,
            'headers' => [
                'User-Agent' => 'Drupal/' . \Drupal::VERSION . ' (+https://www.drupal.org/) ' . Utils::defaultUserAgent(),
            ],
            'handler' => $this->stack,
            // Security consideration: prevent Guzzle from using environment variables
            // to configure the outbound proxy.
'proxy' => [
                'http' => NULL,
                'https' => NULL,
                'no' => [],
            ],
        ];
        $config = NestedArray::mergeDeep($default_config, Settings::get('http_client_config', []), $config);
        return new Client($config);
    }

}

Classes

Title Deprecated Summary
ClientFactory Helper class to construct a HTTP client with Drupal specific config.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.