PHP: повторение запроса определенное количество раз или до успеха - PullRequest
0 голосов
/ 03 апреля 2009

Я делаю запрос к Alexa API, который по какой-то неизвестной причине иногда не работает. Когда это не удается, я хочу автоматически повторить запрос, до 10 раз.

В случае сбоя ответ, возвращаемый API, содержит подстроку AuthFailure.

Какой цикл я могу выполнить, чтобы повторять запрос до тех пор, пока в возвращенном ответе не будет подстроки AuthFailure или не будет предпринято 10 попыток?

Ответы [ 3 ]

4 голосов
/ 03 апреля 2009

Вы можете сделать это с помощью for цикла.

for($i=0; $i < 10; $i++) {
    $return = (Alexa call here) 
    if(!strstr($return,"AuthFailure"))
        break;
}

Настройте 10 на любой желаемый номер. Еще лучше, используйте константу define() 'ed в другом месте. Это будет выполняться до тех пор, пока не будет исчерпано количество попыток или пока возвращаемое значение не будет содержать «AuthFailure».

2 голосов
/ 03 апреля 2009

Я бы сделал что-то вроде этого:

define('ALEXA_FAILED', 'AuthFailure');

$response = ALEXA_FAILED;
$tries = 0;

while ($tries <= 10 && stripos($response, ALEXA_FAILED) !== FALSE)
{
    $response = GetAlexaResponse();
    $tries++;
}
0 голосов
/ 04 апреля 2009

Лично я бы обернул вызов в функцию, например ::

public function getAlexaResponse($aParam)
{
   //code that does the call
   return $response;
}

Я бы расширил эту функцию дополнительным параметром и вызвал бы ее рекурсивно:

public function getAlexaResponse($aParam, $attempts = 10)
{
   //code that does the call
   if(!strstr($response,"AuthFailure") && ($attempt > 0)){
       $this->getAlexaResponse($aParam, --$attempts);
   }
   return $response;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...