ബോഡി പ്രിഫിക്സിന് ശേഷം 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 പ്രോക്സി പട്ടികയിലെ അക്കൗണ്ടില്ലാത്ത എൻട്രിക്ക് ആ എൻഡ്പോയിന്റ് നൽകാം. TLS സർട്ടിഫിക്കറ്റ് പരിശോധന അതിന്റെ സാധാരണ ക്രമീകരണങ്ങൾ നിലനിർത്തുന്നു.
ശൂന്യമല്ലാത്ത ഒരു ചങ്കിന് പൂജ്യം തിരികെ നൽകുന്നത് libcurl-നോട് കോൾബാക്ക് നൽകിയ ഡാറ്റ സ്വീകരിച്ചില്ല എന്ന് പറയുന്നു. അത് CURLE_WRITE_ERROR-മായി നിർത്തുന്നു. ഇവിടെ ആ പിശകും കോൾബാക്കിന്റെ limitReached ഫ്ലാഗും ഒരുമിച്ചുള്ളത് മാത്രമാണ് പ്രതീക്ഷിതമായി കണക്കാക്കുന്നത്.
പരിധിയേക്കാൾ ചെറിയ പ്രതികരണം സാധാരണയായി അവസാനിക്കും. പരിധിയിൽ അല്ലെങ്കിൽ അതിനപ്പുറം prefix പരമാവധി 32 KiB സൂക്ഷിക്കുന്നു, അവസാന കോൾബാക്ക് വലിയ ചങ്ക് ലഭിച്ചാലും. ചങ്ക് വലുപ്പങ്ങൾ മാറുന്നു; ആവശ്യപ്പെട്ട ബഫർ വലുപ്പം സ്ഥിര നീളത്തിലുള്ള വിളികൾക്ക് ഉറപ്പല്ല.
ഇത് സൂക്ഷിക്കുന്ന ബോഡിയെ പരിമിതപ്പെടുത്തുന്നു, കണക്ഷനിൽ ഇതിനകം ബഫർ ചെയ്തതോ കൈമാറിയതോ ആയ ഓരോ ബൈറ്റിനെയല്ല. പ്രിഫിക്സ് ഒരു മൾട്ടിബൈറ്റ് പ്രതീകത്തിന്റെയോ JSON മൂല്യത്തിന്റെയോ HTML ഘടകത്തിന്റെയോ ഉള്ളിൽ അവസാനിക്കാം, അതിനാൽ ഇത് പൂർണ്ണമായി പാഴ്സ് ചെയ്യാവുന്ന രേഖയാണെന്ന് കരുതരുത്.