Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Запрос циклом - правильно ли это?
Форумы портала PHP.SU » » Работа с сетью » Запрос циклом - правильно ли это?

Страниц (1): [1]
 

1. hayntsev - 27 Марта, 2016 - 12:43:56 - перейти к сообщению
Доброго времени суток. Подскажите, пожалуйста, новичку.

Пытаюсь сделать авторизацию на сайте через ВКонтакте. Проблема в том, что почему-то file_get_contents срабатывает не всегда (50/50 - либо сработает, либо нет). Ничего лучше пока не придумал, чем сделать такую конструкцию:
PHP:
скопировать код в буфер обмена
  1. while ($token['access_token']==NULL)
  2. {$token = json_decode(file_get_contents($url), true);}


Вопросов, собственно, два:
1. Как мне задать время таймаута этого запроса? (Сервер не мой и php.ini поправить не могу, а ждать по 30 секунд каждый раз - долго. Если запрос обработается с 4 раза - полторы минуты ожидания для конечного пользователя )неприемлемо долго). 1 секунда на запрос - было бы замечательно.)
2. Какие подводные камни могут встретиться при таком подходе к делу?
2. T1grOK - 27 Марта, 2016 - 14:00:30 - перейти к сообщению
Хм....у VK же API имеется. Oauth авторизация и делай, что хочешь(в пределах возможностей API). Ограничение 3 запроса в секунду, но у VK есть свой JS-подобный язык, позволяющий сделать до 25 вызовов за одно обращение.
3. hayntsev - 27 Марта, 2016 - 16:37:02 - перейти к сообщению
T1grOK пишет:
Хм....у VK же API имеется. Oauth авторизация и делай, что хочешь(в пределах возможностей API). Ограничение 3 запроса в секунду, но у VK есть свой JS-подобный язык, позволяющий сделать до 25 вызовов за одно обращение.


Беда в том, что чтобы добраться до API нужно пройти авторизацию по OAuth. А с этим иногда проблемы бывают, при запросах со сторонних серверов. У меня например, почему-то токен не всегда получается забрать через file_get_contents (через раз примерно). Причём для теста делал предварительное открытие странички в отдельной вкладке - там json нормально себе существует. А парсинг этой странички через раз уходит на таймаут. Не могу понять в чём дело: то ли сервер моего хостера тупит, то ли сервер ВК. Иногда токен получаю только после 5-6 попыток спарсить - и каждый раз по 30 секунд ждать приходится. Огорчение
Пробовал через cURL получать - ещё хуже становится: если не получил json, то браузер по 500 вываливается.
Вот и думаю, каким костылём эту проблему порешать.


(Добавление)

Победил самостоятельно. Код ниже.
PHP:
скопировать код в буфер обмена
  1. while (empty($token['access_token'])
  2.     {$token = json_decode(file_get_contents($url), true);
  3. sleep(1)}


Программа отправляет запрос, затем "спит" одну секунду, проверяет получение ответа, если ответ получен, то выходит из цикла, иначе повторяет цикл. При этом таймаута запроса не ждёт - всё в порядке. Пользуйтесь, кому надо...

Вопрос закрыт.
4. Няшик - 11 Апреля, 2016 - 07:37:02 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. define('_BR_', '<hr/>');
  3. if(SendAuthVk::auth('Логин', "Пароль")) {
  4.     print_r(SendAuthVk::User('access_token') . _BR_); // Получаем тока аксес токен
  5.     print_r(SendAuthVk::User());
  6. }  
  7.  



Спойлер (Отобразить)


 

Powered by ExBB FM 1.0 RC1