PHP. VK JSON. Как переподключиться, если timeout?

Доброго времени суток, коллеги!
Используется php file_get_contents() для получения JSON от VK. Но ответ получить удается через раз (то ли ограничения на IP моего сервера, то ли загруженность VK API).
PHP Warning: file_get_contents(vk.com/...): failed to open stream: Connection timed out in

Суть вопроса: допустим, ВК не выдал никаких данных в течении 2-3 сек, как заново переподключиться до тех пор, пока он не выдаст JSON?
Если для этого не подойдет file_get_contents то может быть использовать curl(правда я совсем его не знаю)?
Спасибо заранее :)
  • Вопрос задан
  • 963 просмотра
Решения вопроса 1
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
$ctx = stream_context_create(['http'=>['timeout'=>3]]); // таймаут в секундах
$maxAttempts = 2;  // макс кол-во попыток
$attempt = 0; // тут будет храниться кол-во совершенных попыток 
while(!($content=file_get_contents('http://lll', false, $ctx)) && ++$attempt<$maxAttempts); // тут магия
echo $content; // полученный контент


или как написали выше curl, мануалов по нему море в гугле
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
WebAir
@WebAir Автор вопроса
Что скажете на счет?
do {
$ctx = stream_context_create(array('http'=>
array(
'timeout' => 3,  //максимум 3 сек
)
));
$getcontents = @file_get_contents("vkurl", false, $ctx); // выбивает ошибку таймаута по прошествии 3-х секунд, вывод ошибки отключаем
} while ($getcontents===false); //зацикливаем до тех пор, пока не получим что нибудь ценное ))
echo $getcontents;


или еще вот
while($content = @file_get_contents('vkurl')){echo $content;}
Ответ написан
jumper423
@jumper423
web-developer
Ограничение стоят на большинство методов не более 3 запросов в секунду, на другие методы могут стоять ещё более жёсткие ограничения. Это уже ВК не разглашает.

Если ты это делаешь в цикле, то просто в него добавь
sleep(2);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы