* * @see https://github.com/php-http/guzzle7-adapter/blob/master/src/Client.php */ class Client implements HttpClientInterface { /** * @var ClientInterface */ private $client; public function __construct(ClientInterface $client = null) { if (!$client) { $client = self::buildClient(); } $this->client = $client; } /** * Factory method to create the Guzzle 7 adapter with custom Guzzle configuration. * * @param array $config * * @return self */ public static function createWithConfig(array $config) : Client { return new self(self::buildClient($config)); } /** * {@inheritdoc} */ public function sendRequest(RequestInterface $request) : ResponseInterface { return $this->sendAsyncRequest($request)->wait(); } /** * {@inheritdoc} */ public function sendAsyncRequest(RequestInterface $request) : Promise { $promise = $this->client->sendAsync($request); return new Promise($promise, $request); } /** * Build the Guzzle client instance. * * @param array $config */ private static function buildClient(array $config = []) : GuzzleClient { $handlerStack = new HandlerStack(Utils::chooseHandler()); $handlerStack->push(Middleware::prepareBody(), 'prepare_body'); $config = \array_merge(['handler' => $handlerStack], $config); return new GuzzleClient($config); } }