clientFactory = $clientFactory; $this->logger = $logger ?: new NullLogger(); } protected function resolveOptions(array $options, array $availableOptions): array { // Add key of ACL token to $availableOptions $availableOptions[] = 'token'; return array_intersect_key($options, array_flip($availableOptions)); } /** * Send a HTTP request. */ protected function request(string $method, string $url, array $options = []): ConsulResponse { $this->logger->debug(sprintf('Consul Request [%s] %s', strtoupper($method), $url)); try { // Create an HTTP Client by $clientFactory closure. $clientFactory = $this->clientFactory; $client = $clientFactory($options); if (! $client instanceof ClientInterface) { throw new ClientException(sprintf('The client factory should create a %s instance.', ClientInterface::class)); } $response = $client->request($method, $url, $options); } catch (TransferException $e) { $message = sprintf('Something went wrong when calling consul (%s).', $e->getMessage()); $this->logger->error($message); throw new ServerException($e->getMessage(), (int) $e->getCode(), $e); } if ($response->getStatusCode() >= 400) { $message = sprintf('Something went wrong when calling consul (%s - %s).', $response->getStatusCode(), $response->getReasonPhrase()); $this->logger->error($message); $message .= PHP_EOL . $response->getBody(); if ($response->getStatusCode() >= 500) { throw new ServerException($message, $response->getStatusCode()); } throw new ClientException($message, $response->getStatusCode()); } return new ConsulResponse($response); } }