Из-за того что ушел из компании где эта проблема наблюдалась, не было времени заняться этим вопросом. Однако на днях проблема повторилась, решил разобраться.
Сама проблема очень непростая в том плане что нет никакой закономерности: CURL может работать идеально скажем неделю-две, а затем вдруг начать возвращать пустой ответ. Причем начиная с того момента как он возвращает пустые ответы, все же иногда он возвращает непустой правильный ответ. Скажем, из 100 запросов он может вернуть 90 пустых ответов, а может и все 100. Может подряд 3 раза правильно отработать, а может только 1 раз вернуть ответ а потом опять пойдут глюки. А вот если перезагрузить сервер то эти глюки пропадают и можно хоть 100 запросов делать без ошибки.
Никаких ошибок через CURL_ERROR мне не выводилось, однако, путем попыток подмены URL адресов, все же каким-то образом удалось пару раз получить ошибку (которая потом пропала) "Problem (2) in the Chunked-Encoded data", что навело меня
эту на страницу
Проблема, видимо, в некоторых версиях CURL, который иногда неверно определяет версию HTTP и делает запросы неправильно. И если жестко заставить CURL использовать версию HTTP 1.0:
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
То вроде как проблема решается. Во всяком случае, после того как я прописал этот параметр, без перезагрузки сервера все опять заработало. Пока еще рано судить, посмотрим что будет через неделю-две.
Что интересно в этой проблеме, если делать только простые запросы на, к примеру, yandex.ru, то никаких глюков не будет. Глюки начинаются если начать делать сложные запросы с прописыванием заголовков и т.п. на какой-нибудь Mailchimp. Но как только проблема начинается, начинают глючить и все последующие запросы, даже простые GET на yandex.ru - будет пустой ответ. Т.е. мы подхватываем ошибку и она распространяется уже на все последующие запросы.