د PHP cURL لیږد د بدن د پیل برخې وروسته ودروئ
په لیکلو callback کې محدوده پیل برخه وساتئ او یوازې هغه لیکلو تېروتنه وپېژنئ چې همدا callback په قصداً جوړوي.
د cURL لیکلو callback کولی شي د بدن محدوده پیل برخه وساتي او کله چې دا حد پوره شي لیږد ودروي. خپله خپله بیرغ وکاروئ ترڅو هغه قصداً درول له بلې لیکلو ناکامۍ څخه جلا کړئ.
د هغه نوي handle لپاره چې هدف 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);
}
د proxy URL socks5h سکیم له proxy څخه غواړي چې د هدف کوربه نوم حل کړي. په ښودل شوي نوي handle کې د اجازه شوي عامه هدف ازموینې لپاره د SOCKS5 proxy لیست څخه بې حسابه ننوتنه کولی شي هغه endpoint چمتو کړي. د TLS سند تصدیق خپل نورمال ترتیبات ساتي.
د نه خالي ټوټې لپاره صفر بیرته ورکول libcurl ته وایي چې callback ورکړل شوې معلومات ونه منل. دا د CURLE_WRITE_ERROR سره ودروي. دلته یوازې د هغې تېروتنې او د callback limitReached بیرغ یوځای والا د تمه وړ ګڼل کیږي.
د حد څخه لنډ ځواب په نورمال ډول پای ته رسیږي. په حد یا له هغه پورته، prefix ډېر ډېر 32 KiB ساتي حتی که وروستنی callback لویه ټوټه ترلاسه کړي. د ټوټو اندازې توپیر لري؛ غوښتل شوې بفر اندازه د ثابت اوږدوالي غوښتنو تضمین نه دی.
دا ساتل شوی بدن محدودوي، نه هغه هره بایټ چې لا دمخه بفر شوې یا په اړیکه کې لیږدول شوې. پیل برخه کولی شي د څو بایټي توري، JSON ارزښت یا HTML عنصر په منځ کې پای ته ورسیږي، نو مه فکر کوئ چې دا بشپړ د تحلیل وړ سند دی.