cURL rakstīšanas callback funkcija var saglabāt ierobežotu ķermeņa prefiksu un apturēt pārsūtīšanu, tiklīdz šī robeža ir sasniegta. Izmantojiet savu karodziņu, lai atšķirtu šo apzināto apturēšanu no citas rakstīšanas kļūdas.

Jaunam handle, kura mērķa URL jau ir konfigurēts:

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

Starpniekservera URL socks5h shēma lūdz starpniekserveri atrisināt mērķa resursdatora nosaukumu. Atļautam publiska mērķa testam ar parādīto jauno handle var noderēt ieraksts bez konta no SOCKS5 starpniekserveru saraksta. TLS sertifikāta pārbaude saglabā normālos iestatījumus.

Nulles atgriešana par ne tukšu daļu informē libcurl, ka callback funkcija nav pieņēmusi sniegtos datus. Tā pārtrauc darbību ar CURLE_WRITE_ERROR. Šeit par gaidītu tiek uzskatīta tikai šīs kļūdas un callback funkcijas limitReached karodziņa kombinācija.

Atbilde, kas īsāka par robežu, beidzas normāli. Pie robežas vai virs tās prefix saglabā ne vairāk kā 32 KiB, pat ja pēdējā callback funkcija saņem lielāku daļu. Daļu izmēri atšķiras; pieprasītais bufera izmērs negarantē fiksēta garuma izsaukumus.

Tas ierobežo saglabāto ķermeni, nevis katru baitu, kas jau ir buferī vai pārsūtīts savienojumā. Prefikss var beigties daudzbaitu rakstzīmes, JSON vērtības vai HTML elementa iekšienē, tāpēc nepieņemiet, ka tas ir pilnīgs analizējams dokuments.

Saistītie raksti