Если вы используете guzzle
в качестве PHP HTTP-клиента, то вам просто нужно определить решатель повторных попыток и таймер повторных попыток
public function retryDecider()
{
return function ($retries, Request $request, Response $response = null, RequestException $exception = null)
{
// maximum retries is three times
if ($retries >= 3) {
return false;
}
if ($response) {
$content = $response->getBody()->getContents();
$res1 = json_decode($content, true);
$res1 = collect($res1);
// maybe you need to change this one to 'substr' or regex or something else
if ($res1['Status'] == 'UpdatesComplete') {
return false;
}
}
return true; // we will request again
};
}
public function retryDelay()
{
return function ($numberOfRetries) {
return 1000; // 1 second
};
}
и использовать эту функцию определения и задержки
$handlerStack = HandlerStack::create(new CurlHandler());
$handlerStack->push(Middleware::retry($this->retryDecider(), $this->retryDelay()));
$client = new Client(array('handler' => $handlerStack));
и получите ответ
$url = 'http://partners.api.skyscanner.net/apiservices/pricing/uk2/v1.0/'.$session_id.'?apikey=APIKEY&pageIndex=0&pageSize=10"';
$response = $client->request('GET', $url)->getBody()->getContents();
Вы можете расшифровать последний $response
, чтобы решить, хотите ли вы сделать.
При таком подходе вы можете решить, какой ответ является действительным, и повторить запрос столько раз, сколько захотите.