የ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);
}
የፕሮክሲው socks5h እቅድ ፕሮክሲው የዒላማውን የአስተናጋጅ ስም እንዲፈታ ይጠይቃል። በላይ በሚታየው አዲስ አያያዥ ላይ የተፈቀደ የሕዝብ ዒላማ ሙከራ ለማድረግ ከየSOCKS5 ፕሮክሲ ዝርዝር ያለ መለያ የሚገኝ መዝገብ ያንን መጨረሻ ነጥብ ሊያቀርብ ይችላል። የTLS ሰርተፊኬት ማረጋገጫ የተለመደውን ቅንብሩን ይይዛል።
ለባዶ ላልሆነ ቁራጭ ዜሮ መመለስ libcurl ን መልሶ-ጥሪው የቀረበውን ውሂብ አልተቀበለም ብሎ ይነግረዋል። በCURLE_WRITE_ERROR ያቋርጣል። እዚህ እንደ ተጠበቀ የሚቆጠረው የዚያ ስህተትና የመልሶ-ጥሪው limitReached ባንዲራ ጥምረት ብቻ ነው።
ከገደቡ አጭር ምላሽ በተለመደው ይጠናቀቃል። በገደቡ ወይም ከዚያ በላይ ሲሆን prefix ቢበዛ 32 KiB ይይዛል፣ የመጨረሻው መልሶ-ጥሪ ትልቅ ቁራጭ ቢቀበልም። የመልሶ-ጥሪ ቁራጭ መጠኖች ይለያያሉ፤ የተጠየቀው የቋት መጠን ቋሚ ርዝመት ጥሪዎችን ዋስትና አይሰጥም።
ይህ የተያዘውን አካል ይገድባል፣ በግንኙነቱ ላይ አስቀድሞ በቋት ውስጥ የገባውን ወይም የተላለፈውን ሁሉንም ባይት አይደለም። ቅድመ-ቅጥያው በብዙ-ባይት ቁምፊ፣ በJSON እሴት ወይም በHTML አካል ውስጥ ሊያበቃ ይችላል፣ ስለዚህ ሙሉ ተተነተነ ሰነድ ነው ብለው አይያዙ።