Callback tulis cURL dapat menyimpan prefiks body yang terbatas dan menghentikan transfer begitu batas itu tercapai. Gunakan flag Anda sendiri untuk membedakan penghentian yang disengaja itu dari kegagalan tulis lain.

Untuk handle baru yang URL tujuannya sudah dikonfigurasi:

$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);
}

Skema socks5h pada URL proxy meminta proxy menyelesaikan nama host tujuan. Untuk uji yang diizinkan ke target publik pada handle baru yang ditunjukkan, entri tanpa akun dari daftar proxy SOCKS5 dapat menyediakan endpoint tersebut. Verifikasi sertifikat TLS tetap memakai pengaturan normalnya.

Mengembalikan nol untuk potongan yang tidak kosong memberi tahu libcurl bahwa callback tidak menerima data yang diberikan. Transfer dibatalkan dengan CURLE_WRITE_ERROR. Di sini hanya kombinasi kesalahan itu dan flag limitReached milik callback yang dianggap sesuai harapan.

Respons yang lebih pendek dari batas selesai secara normal. Pada atau di atas batas, prefix menyimpan paling banyak 32 KiB meskipun callback terakhir menerima potongan yang lebih besar. Ukuran potongan bervariasi; ukuran buffer yang diminta bukan janji panggilan dengan panjang tetap.

Ini membatasi body yang disimpan, bukan setiap byte yang sudah dibuffer atau ditransfer pada koneksi. Prefiks dapat berakhir di tengah karakter multibita, nilai JSON, atau elemen HTML, jadi jangan menganggapnya sebagai dokumen lengkap yang dapat diurai.

Artikel terkait