@NikHaker
/

Почему зависают curl запросы?

У меня есть сервер на Ubuntu и приложение на php, которое делает запросы к vk api по https через curl. Сам vk api вряд ли может зависать, т. к. на странице https://vk.com/dev/health время выполнения любых методов измеряется миллисекундами. Но довольно часто (хоть и без какой-то закономерности) мои curl запросы начинают зависать и обрываться по таймауту (5 секунд).
Вот такие ошибки возвращает curl:
Resolving timed out after 2527 milliseconds
Запросы отправляю с такими опциями:
curl_setopt($ch, CURLOPT_URL, 'https://api.vk.com/method/<имя метода, которому обращаюсь>');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['param1'=>$value, ...])); // параметры для vk api
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );

Последнюю строку добавил после прочтения статьи на хабре, но это не помогло.
Уже не знаю, что и думать. Может с сертификатами какие-то проблемы у меня?
  • Вопрос задан
  • 2386 просмотров
Пригласить эксперта
Ответы на вопрос 2
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Похоже, у вас кэширование DNS-ответов не используется и DNS-сервер периодически тупит.
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Эта ошибка (единственное место с такой формулировкой текста, в исходнике PHP не встречается, только проксируется из libcurl) прилетает по достижении таймаута, когда соединение в статусе CURLM_STATE_WAITRESOLVE - то есть всё ещё ждёт ответ DNS.
Проверяйте используемые системой DNS
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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