'n cURL-skryf-terugroepfunksie kan 'n beperkte prefiks van die liggaam hou en die oordrag stop sodra daardie limiet bereik word. Gebruik jou eie vlag om daardie doelbewuste stop van 'n ander skryffout te onderskei.

Vir 'n nuwe handvatsel waarvan die teiken-URL reeds opgestel is:

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

Die socks5h-skema van die proxy-URL vra die proxy om die teiken-gasheernaam op te los. Vir 'n toegelate toets op 'n publieke teiken met die nuwe handvatsel hierbo kan 'n inskrywing sonder rekening uit die SOCKS5-proxylys daardie eindpunt verskaf. TLS-sertifikaatverifikasie behou sy normale instellings.

Om nul terug te gee vir 'n nie-leë stukkie sê vir libcurl dat die terugroepfunksie nie die verskafde data aanvaar het nie. Dit breek af met CURLE_WRITE_ERROR. Net die kombinasie van daardie fout en die terugroepfunksie se limitReached-vlag word hier as verwag beskou.

'n Antwoord korter as die limiet eindig normaal. Op of bo die limiet hou prefix hoogstens 32 KiB, selfs as die finale terugroepfunksie 'n groter stukkie ontvang. Stukgroottes van terugroepfunksies verskil; 'n versoekte buffersgrootte is nie 'n belofte van vaste lengtes nie.

Dit beperk die behoue liggaam, nie elke greep wat reeds gebuffer of op die verbinding oorgedra is nie. Die prefiks kan binne 'n multigreep-karakter, 'n JSON-waarde of 'n HTML-element eindig, so moenie aanneem dit is 'n volledige parseerbare dokument nie.

Verwante artikels