ශරීර පූර්ව අගට පසුව PHP cURL මාරුව නවත්වන්න
රයිට් කෝල්බැක් තුළ සීමිත පූර්ව අගක් තබාගෙන එම කෝල්බැක් හිතාමතාම ඇති කරන රයිට් දෝෂය පමණක් හඳුනාගන්න.
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 ප්රොක්සි ලැයිස්තුවවෙන් ගිණුමක් නොමැති සටහනක් එම endpoint එක සැපයිය හැකිය. TLS සහතික සත්යාපනය එහි සාමාන්ය සැකසුම් රඳවා ගනී.
හිස් නොවන කොටසක් සඳහා බිංදුව ලබා දීම libcurl වෙත කෝල්බැක් එක ලබා දුන් දත්ත පිළිගත්තේ නැති බව දන්වයි. එය CURLE_WRITE_ERROR සමඟ නතර වේ. මෙහි අපේක්ෂිත ලෙස සලකනුයේ එම දෝෂය සහ කෝල්බැක් හි limitReached කොඩිය එකට තිබීම පමණි.
සීමාවට වඩා කෙටි ප්රතිචාරයක් සාමාන්ය ලෙස අවසන් වේ. සීමාවේ හෝ ඊට වැඩි විට prefix උපරිම 32 KiB රඳවා ගනී, අවසාන කෝල්බැක් විශාල කොටසක් ලැබුවත්. කොටස්වල ප්රමාණ වෙනස් වේ; ඉල්ලන ලද බෆර ප්රමාණය ස්ථිර දිග ඇමතුම් සඳහා පොරොන්දුවක් නොවේ.
මෙය රඳවාගත් ශරීරය සීමා කරයි, සම්බන්ධතාවයේ දැනටමත් බෆර කළ හෝ මාරු කළ සෑම බයිටයක්ම නොවේ. පූර්ව අග බහු-බයිට් අක්ෂරයක්, JSON අගයක් හෝ HTML මූලද්රව්යයක් තුළ අවසන් විය හැකිය, එබැවින් එය සම්පූර්ණයෙන් විග්රහ කළ හැකි ලේඛනයක් යැයි නොසිතන්න.