Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
   1  <?php
   2  
   3  namespace GuzzleHttp\Handler;
   4  
   5  use GuzzleHttp\Promise\PromiseInterface;
   6  use Psr\Http\Message\RequestInterface;
   7  
   8  /**
   9   * HTTP handler that uses cURL easy handles as a transport layer.
  10   *
  11   * When using the CurlHandler, custom curl options can be specified as an
  12   * associative array of curl option constants mapping to values in the
  13   * **curl** key of the "client" key of the request.
  14   *
  15   * @final
  16   */
  17  class CurlHandler
  18  {
  19      /**
  20       * @var CurlFactoryInterface
  21       */
  22      private $factory;
  23  
  24      /**
  25       * Accepts an associative array of options:
  26       *
  27       * - handle_factory: Optional curl factory used to create cURL handles.
  28       *
  29       * @param array{handle_factory?: ?CurlFactoryInterface} $options Array of options to use with the handler
  30       */
  31      public function __construct(array $options = [])
  32      {
  33          $this->factory = $options['handle_factory']
  34              ?? new CurlFactory(3);
  35      }
  36  
  37      public function __invoke(RequestInterface $request, array $options): PromiseInterface
  38      {
  39          if (isset($options['delay'])) {
  40              \usleep($options['delay'] * 1000);
  41          }
  42  
  43          $easy = $this->factory->create($request, $options);
  44          \curl_exec($easy->handle);
  45          $easy->errno = \curl_errno($easy->handle);
  46  
  47          return CurlFactory::finish($this, $easy, $this->factory);
  48      }
  49  }