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 ಅಂಶದ ಒಳಗೆ ಮುಗಿಯಬಹುದು, ಆದ್ದರಿಂದ ಇದು ಸಂಪೂರ್ಣವಾಗಿ ವಿಶ್ಲೇಷಿಸಬಹುದಾದ ದಾಖಲೆ ಎಂದು ಭಾವಿಸಬೇಡಿ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು