Страница 1 из 1

Curl - пустое тело ответа

Добавлено: 02 ноя 2017, 09:38
kisil-mike
Странное дело, уже 2 раза столкнулся с такой ситуацией: если сервер не перезапускать долгое время, то где-то через месяц Curl начинает возвращать пустое тело ответа. Возможно это зависит от количества запросов, у меня за месяц их много набирается. Сам запрос отрабатывает как надо: данные отправляет и судя по продолжительности выполнения, ожидает ответа, получает и просто выводит пустой результат. Помогает перезагрузка OS.

Подскажите, как выяснить в чем проблема, может кто сталкивался? Может какой-нибудь темп переполняется или кэш? Запросы идут без кук, обычный парсинг страницы.

Re: Curl - пустое тело ответа

Добавлено: 02 ноя 2017, 10:04
Максим
Подсказываю. Fiddler для анализа трафика + xdebug для отладки PHP = выяснение проблемы, если это конечно не баг php/curl.

Re: Curl - пустое тело ответа

Добавлено: 02 ноя 2017, 13:15
kisil-mike
Спасибо за наводку на fiddler, как проблема повторится буру разбираться, отпишусь если что прояснится.

Re: Curl - пустое тело ответа

Добавлено: 01 янв 2018, 17:35
kisil-mike
Из-за того что ушел из компании где эта проблема наблюдалась, не было времени заняться этим вопросом. Однако на днях проблема повторилась, решил разобраться.

Сама проблема очень непростая в том плане что нет никакой закономерности: 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 - будет пустой ответ. Т.е. мы подхватываем ошибку и она распространяется уже на все последующие запросы.