Рекурсия по запросу

Я разрабатываю некоторые запросы с 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" это работает отлично.

1

Решение

добавлять 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,
  • Заменены == от ====,
  • Создайте исключение, если ваш код неизвестен вашему API. Вместо повторной попытки скрипт должен завершиться в случае неизвестного статуса.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]