cURL राइट कॉलबैक सीमित बॉडी प्रीफ़िक्स रख सकता है और वह सीमा पूरी होते ही ट्रांसफ़र रोक सकता है। उस जानबूझकर किए गए रोकाव को किसी दूसरी राइट विफलता से अलग पहचानने के लिए अपना फ़्लैग इस्तेमाल करें।

ऐसे नए हैंडल के लिए जिसका लक्ष्य URL पहले से कॉन्फ़िगर है:

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

प्रॉक्सी URL की socks5h स्कीम प्रॉक्सी से लक्ष्य होस्टनाम हल करने को कहती है। दिखाए गए नए हैंडल पर अनुमत सार्वजनिक-लक्ष्य परीक्षण के लिए SOCKS5 प्रॉक्सी सूची से बिना खाते वाली प्रविष्टि वह एंडपॉइंट दे सकती है। TLS प्रमाणपत्र सत्यापन अपनी सामान्य सेटिंग्स रखता है।

खाली न होने वाले चंक के लिए शून्य लौटाना libcurl को बताता है कि कॉलबैक ने दिया गया डेटा स्वीकार नहीं किया। यह CURLE_WRITE_ERROR के साथ रुक जाता है। यहाँ केवल उस त्रुटि और कॉलबैक के limitReached फ़्लैग के संयोजन को अपेक्षित माना जाता है।

सीमा से छोटा प्रतिक्रिया सामान्य रूप से पूरी होती है। सीमा पर या उससे ऊपर, prefix अधिकतम 32 KiB रखता है, भले ही अंतिम कॉलबैक को बड़ा चंक मिले। चंक के आकार बदलते हैं; माँगा गया बफ़र आकार स्थिर लंबाई के कॉल का वादा नहीं है।

यह रखे गए बॉडी को सीमित करता है, कनेक्शन पर पहले से बफ़र किए या स्थानांतरित हर बाइट को नहीं। प्रीफ़िक्स बहु-बाइट अक्षर, JSON मान या HTML एलिमेंट के भीतर खत्म हो सकता है, इसलिए यह न मानें कि यह पूरा पार्स करने योग्य दस्तावेज़ है।

संबंधित लेख