Một write callback của cURL có thể giữ một đoạn đầu giới hạn của thân và dừng việc truyền ngay khi đạt giới hạn đó. Hãy dùng cờ của riêng bạn để phân biệt lần dừng có chủ đích đó với một lỗi ghi khác.

Đối với một handle mới đã được cấu hình URL đích:

$limit = 32768;
$prefix = '';
$limitReached = false;

curl_setopt_array($ch, [
    CURLOPT_PROXY => 'socks5h://proxy.example.net:1080',
    CURLOPT_HEADER => false,
    CURLOPT_WRITEFUNCTION => function ($handle, $chunk)
        use (&$prefix, &$limitReached, $limit) {
        $remaining = $limit - strlen($prefix);
        $prefix .= substr($chunk, 0, $remaining);

        if (strlen($prefix) >= $limit) {
            $limitReached = true;
            return 0;
        }

        return strlen($chunk);
    },
]);

$result = curl_exec($ch);
$error = curl_errno($ch);

$expectedStop = $limitReached && $error === CURLE_WRITE_ERROR;
if ($result === false && !$expectedStop) {
    throw new RuntimeException(curl_error($ch), $error);
}

Lược đồ socks5h trong URL proxy yêu cầu proxy phân giải tên máy chủ đích. Để thử nghiệm được phép trên một đích công khai với handle mới được hiển thị, một mục không cần tài khoản từ danh sách proxy SOCKS5 có thể cung cấp endpoint đó. Việc xác minh chứng chỉ TLS vẫn giữ các thiết lập thông thường.

Trả về số không cho một đoạn không rỗng cho libcurl biết rằng callback đã không chấp nhận dữ liệu được cung cấp. Việc truyền bị hủy với CURLE_WRITE_ERROR. Ở đây chỉ sự kết hợp của lỗi đó và cờ limitReached của callback mới được coi là nằm trong dự kiến.

Một phản hồi ngắn hơn giới hạn sẽ kết thúc bình thường. Ở hoặc vượt giới hạn, prefix chỉ giữ tối đa 32 KiB kể cả khi callback cuối nhận một đoạn lớn hơn. Kích thước đoạn thay đổi; kích thước bộ đệm được yêu cầu không phải lời hứa về các lần gọi có độ dài cố định.

Điều này giới hạn phần thân được giữ lại, không giới hạn mọi byte đã được đệm hoặc truyền trên kết nối. Đoạn đầu có thể kết thúc giữa một ký tự nhiều byte, một giá trị JSON hoặc một phần tử HTML, vì vậy đừng cho rằng đó là một tài liệu hoàn chỉnh có thể phân tích được.

Bài viết liên quan