Я разрабатываю некоторые запросы с Symfony
получить отчет SSL от SSLLabs.
Проблема: Если я отправляю этот запрос, я получаю ответ и проверяю один параметр. Для этого параметра есть три параметра («ОШИБКА», «IN_PROGRESS», «ГОТОВ»), которые я должен обработать.
public function getSSLReport(string $request)
{
try{
$result = null;
$httpClient = new \GuzzleHttp\Client();
$response = $httpClient->request('GET', 'https://api.ssllabs.com/api/v3/analyze?host='.$request.'&all=on');
$result = json_decode($response->getBody()->getContents(), true);
if($result['status'] == "READY") {
return new JsonResponse($result);
} else if($result['status'] == "ERROR") {
return new JsonResponse($result['statusMessage']);
} else {
$this->getSSLReport($request);
}
}catch (\Exception $ex)
{
return new JsonResponse($ex);
}
}
Я использую некоторую рекурсию для повторного вызова этого метода, если $result
является IN_PROGRESS
, Но запрос все время находится в состоянии ожидания и отменяется через 30 секунд.
Если я получу ответ где "status" == "READY"
это работает отлично.
добавлять sleep
подождать пару секунд:
if($result['status'] === "READY") {
return new JsonResponse($result);
}
if($result['status'] === "ERROR") {
return new JsonResponse($result['statusMessage']);
}
if($result['status'] === "IN_PROGRESS") {
sleep(5);
return $this->getSSLReport($request);
}
throw new \Exception('Unknown status from SSLLabs');
Что я изменил:
else
и заменил elseif
от if
,==
от ====
,Других решений пока нет …