Ang isang write callback ng cURL ay maaaring magpanatili ng limitadong prefix ng katawan at itigil ang paglipat kapag naabot na ang limitasyong iyon. Gamitin ang sarili mong flag para makilala ang sadyang paghinto na iyon mula sa ibang pagkabigo sa pagsulat.

Para sa bagong handle na ang target na URL ay nakaayos na:

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

Hinihiling ng socks5h scheme ng URL ng proxy na i-resolve ng proxy ang target na hostname. Para sa pinahihintulutang pagsubok sa pampublikong target sa ipinakitang bagong handle, ang isang entry na walang account mula sa listahan ng SOCKS5 proxy ay makapagbibigay ng endpoint na iyon. Pinapanatili ng pagpapatunay ng TLS certificate ang normal nitong mga setting.

Ang pagbabalik ng zero para sa hindi bakanteng piraso ay nagsasabi sa libcurl na hindi tinanggap ng callback ang ibinigay na data. Humihinto ito nang may CURLE_WRITE_ERROR. Dito, tanging ang pinagsamang error na iyon at ang limitReached flag ng callback ang itinuturing na inaasahan.

Ang tugon na mas maikli kaysa sa limitasyon ay nagtatapos nang normal. Sa limitasyon o higit pa, nagpapanatili ang prefix ng hindi hihigit sa 32 KiB kahit makatanggap ang huling callback ng mas malaking piraso. Nag-iiba ang laki ng piraso; ang hiniling na laki ng buffer ay hindi pangako ng mga tawag na may takdang haba.

Nililimitahan nito ang pinanatiling katawan, hindi ang bawat byte na na-buffer na o nailipat sa koneksyon. Maaaring matapos ang prefix sa loob ng multibyte na character, halaga ng JSON o elemento ng HTML, kaya huwag ipagpalagay na ito ay kumpletong dokumentong maaaring i-parse.

Kaugnay na mga artikulo