Ett cURL-write-callback kan behålla ett begränsat prefix av bodyn och stoppa överföringen så snart gränsen nås. Använd din egen flagga för att skilja det avsiktliga stoppet från ett annat skrivfel.

För ett nytt handle vars mål-URL redan är konfigurerad:

$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-URL:ens socks5h-schema ber proxyn att slå upp målvärdnamnet. För ett tillåtet test mot ett offentligt mål på det visade nya handlet kan en post utan konto från SOCKS5-proxylistan tillhandahålla den endpointen. TLS-certifikatverifieringen behåller sina normala inställningar.

Att returnera noll för en icke-tom bit talar om för libcurl att callbacket inte accepterade de levererade data. Det avbryter med CURLE_WRITE_ERROR. Här behandlas bara kombinationen av det felet och callbackets limitReached-flagga som förväntad.

Ett svar som är kortare än gränsen avslutas normalt. Vid eller över gränsen behåller prefix högst 32 KiB även om det sista callbacket tar emot en större bit. Bitstorlekar varierar; en begärd buffertstorlek är inget löfte om anrop med fast längd.

Detta begränsar den behållna bodyn, inte varje byte som redan är buffrad eller överförd på anslutningen. Prefixet kan sluta mitt i ett multibyte-tecken, ett JSON-värde eller ett HTML-element, så anta inte att det är ett fullständigt dokument som går att tolka.

Relaterade artiklar