Thu thập các dòng tiêu đề tách biệt khỏi phần thân phản hồi. Một lần truyền qua proxy có thể gửi các tiêu đề CONNECT, xác thực, chuyển hướng và phản hồi đích trong một thao tác:

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

Callback này giữ nguyên thứ tự dòng thô và trả về số byte đã nhận. Nó nhận các dòng đầy đủ; nhưng chưa nhóm chúng thành phản hồi hay chọn tiêu đề của trang web cuối cùng.

Diễn giải trình tự như các khối

Một dòng trạng thái HTTP bắt đầu một khối phản hồi, và một dòng trống kết thúc các tiêu đề của khối đó. Giữ các ranh giới ấy trước khi chọn phản hồi đích cuối cùng. Các lần thử xác thực trung gian và chuyển hướng đều có thể thêm khối.

Trailer có thể đến sau qua callback. Giữ đủ trạng thái bộ phân tích để phân biệt chúng với các tiêu đề ban đầu, thay vì gắn mọi trường về sau vào phản hồi đầu tiên.

Giữ hoặc chặn bằng chứng đường hầm

Đọc CURLINFO_HTTP_CONNECTCODE riêng cho trạng thái CONNECT của đường hầm HTTPS. Một đường hầm được chấp nhận không chứng minh phản hồi thành công của trang web.

Nếu bộ thu thập không cần tiêu đề CONNECT, CURLOPT_SUPPRESS_CONNECT_HEADERS kiểm soát việc gửi chúng tới đầu ra tiêu đề đã cấu hình và các đường callback. Kiểm tra hỗ trợ trong libcurl và bản dựng PHP được liên kết. Việc chặn giúp thu thập đơn giản hơn nhưng loại bỏ bằng chứng đường hầm ở cấp tiêu đề có thể giúp chẩn đoán.

Không khôi phục phần thân bằng độ lệch cố định hay bằng cách tìm thẻ HTML. Kích thước tiêu đề thay đổi, phản hồi trung gian khác nhau, và phần thân có thể là nhị phân hoặc rỗng. Một báo cáo lỗi cũ dành riêng cho bản phát hành không biện minh cho độ lệch đoán được.

Giữ việc xử lý phần thân tách biệt, và lưu lỗi truyền cùng các giai đoạn phản hồi quan sát được nếu việc thu thập hoặc phân tích thất bại. Điều đó phân biệt callback bị ngắt, dữ liệu ứng dụng sai lệch và trao đổi proxy bị từ chối.

Bài viết liên quan