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 عنصر کے اندر ختم ہو سکتا ہے، اس لیے یہ نہ سمجھیں کہ یہ مکمل قابل تجزیہ دستاویز ہے۔

متعلقہ مضامین