cURL idazketa-callback batek gorputzaren prefix mugatu bat gorde eta transferentzia geldi dezake muga horretara iristean. Erabili zure bandera propioa geldiketa nahitako hori beste idazketa-hutsegite batetik bereizteko.

Jada helburuko URLa konfiguratuta duen handle berri baterako:

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

Proxy URLaren socks5h eskemak proxyari eskatzen dio helburuko ostalari-izena ebazteko. Erakutsitako handle berrian baimendutako helburu publiko baterako proba egiteko, SOCKS5 proxy zerrendako konturik gabeko sarrera batek endpoint hori eman dezake. TLS ziurtagiriaren egiaztapenak bere ezarpen normalak mantentzen ditu.

Tuki ez-huts baterako zero itzultzeak libcurli esaten dio callbackak ez dituela eman zaizkion datuak onartu. CURLE_WRITE_ERROR-rekin eteten da. Hemen errore horren eta callbackaren limitReached banderaren konbinazioa soilik hartzen da esperotakotzat.

Muga baino laburragoa den erantzun bat normaltasunez amaitzen da. Mugan edo gainetik, prefix-ek gehienez 32 KiB gordetzen ditu, azken callbackak tuki handiagoa jasotzen badu ere. Tukien tamainak aldatzen dira; eskatutako buffer-tamainak ez du luzera finkoko deien bermerik ematen.

Honek gordetako gorputza mugatzen du, ez konexioan dagoeneko bufferratu edo transferitutako byte guztiak. Prefixa karaktere multibyte baten, JSON balio baten edo HTML elementu baten barruan amaitu daiteke, beraz ez pentsa dokumentu oso analizagarria denik.

Erlazionatutako artikuluak