Собирайте строки заголовков отдельно от тела ответа. Передача через прокси может доставить заголовки CONNECT, аутентификации, перенаправления и ответа целевого сайта за одну операцию:

$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
    function ($handle, $line) use (&$headerLines) {
        $headerLines[] = $line;
        return strlen($line);
    }
);

Этот обратный вызов сохраняет исходную последовательность строк и возвращает число принятых байт. Он получает полные строки; однако пока не группирует их в ответы и не выбирает заголовки итогового сайта.

Трактуйте последовательность как блоки

Строка состояния HTTP начинает блок ответа, а пустая строка завершает его заголовки. Сохраняйте эти границы до выбора финального ответа цели. Промежуточные попытки аутентификации и перенаправления могут добавлять блоки.

Трейлеры могут прийти позже через обратный вызов. Храните достаточно состояния парсера, чтобы отличать их от начальных заголовков, вместо того чтобы прикреплять каждое последующее поле к первому ответу.

Сохраняйте или подавляйте свидетельство туннеля

Читайте CURLINFO_HTTP_CONNECTCODE отдельно для статуса CONNECT туннеля HTTPS. Принятый туннель не доказывает успешный ответ сайта.

Если заголовки CONNECT сборщику не нужны, CURLOPT_SUPPRESS_CONNECT_HEADERS управляет их доставкой в настроенный вывод заголовков и пути обратного вызова. Проверьте поддержку в связанных libcurl и сборке PHP. Подавление упрощает сбор, но удаляет свидетельство туннеля на уровне заголовков, которое может помочь диагностике.

Не восстанавливайте тело фиксированным смещением или поиском HTML-тега. Размеры заголовков различаются, промежуточные ответы отличаются, а тело может быть двоичным или пустым. Старый отчёт об ошибке, специфичный для версии, не оправдывает угаданное смещение.

Держите обработку тела отдельно и сохраняйте ошибку передачи вместе с наблюдёнными этапами ответа, если сбор или разбор не удался. Это различает прерванный обратный вызов, повреждённые данные приложения и отклонённый обмен через прокси.

Похожие статьи