public function __construct() { static::init(); $Stack = new \GuzzleHttp\HandlerStack(); $Stack->setHandler(new \GuzzleHttp\Handler\CurlHandler()); /** * Здесь ставим ловушку, чтобы с помощью редиректов * определить адрес сервера, который сможет отсылать сообщения */ $Stack->push(\GuzzleHttp\Middleware::mapResponse(function (\Psr\Http\Message\ResponseInterface $Response) { $code = $Response->getStatusCode(); if ($code >= 301 && $code <= 303 || $code == 307 || $code == 308) { $location = $Response->getHeader('Location'); preg_match('/https?://([^-]*-)client-s/', $location, $matches); if (array_key_exists(1, $matches)) { $this->cloud = $matches[1]; } } return $Response; })); /** * Ловушка для отлова хедера Set-RegistrationToken * Тоже нужен для отправки сообщений */ $Stack->push(\GuzzleHttp\Middleware::mapResponse(function (\Psr\Http\Message\ResponseInterface $Response) { $header = $Response->getHeader("Set-RegistrationToken"); if (count($header) > 0) { $this->regToken = trim(explode(';', $header[0])[0]); } return $Response; })); $this->Client = new Client(['handler' => $Stack, 'cookies' => true]); }
protected function buildGuzzleFromResponses(array $responses, $history = null) { $mock = new \GuzzleHttp\Handler\MockHandler($responses); $handler = new \GuzzleHttp\HandlerStack($mock); if ($history) { $handler->push($history); } return new HttpClient(['handler' => $handler]); }