Dakatar da canjin PHP cURL bayan gaban jiki
Riƙe iyakataccen prefix a cikin callback na rubutu kuma gane kawai kuskuren rubutun da wannan callback ya haifar da gangan.
Callback na rubutu na cURL na iya riƙe iyakataccen prefix na jiki kuma ya dakatar da canja wurin da zarar an kai wannan iyaka. Yi amfani da tutar ka don bambanta wannan dakatarwar da gangan da wata gazawar rubutu.
Don sabon handle wanda aka riga an saita URL ɗin manufa:
$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);
}
Tsarin socks5h na URL ɗin proxy yana neman proxy ya warware sunan mai masaukin manufa. Don gwajin da aka yarda a kan manufa ta jama'a a sabon handle ɗin da aka nuna, shigarwa marar asusu daga jerin proxy na SOCKS5 na iya samar da wannan ƙarshen wuri. Tabbatar da takardar shaidar TLS tana riƙe saitunan ta na yau da kullum.
Mayar da sifili don guntun da ba fanko ba yana gaya wa libcurl cewa callback ɗin bai karɓi bayanan da aka bayar ba. Yana tsayawa da CURLE_WRITE_ERROR. Anan ana ɗaukar haɗin wannan kuskure da tutar limitReached na callback a matsayin abin da ake tsammani kawai.
Amsa da ta fi iyaka guntu tana ƙarewa kamar yadda aka saba. A iyaka ko sama da ita, prefix yana riƙe da aƙalla 32 KiB ko da callback na ƙarshe ya sami babban guntu. Girman guntu yana bambanta; girman buffer da aka nema ba alkawari ba ne na kira mai tsayayyen tsayi.
Wannan yana iyakance jikin da aka riƙe, ba kowane byte da aka riga an adana a buffer ko an canja shi a kan haɗin ba. Prefix ɗin na iya ƙarewa cikin harafi mai byte da yawa, ƙimar JSON ko ɓangaren HTML, don haka kada ka ɗauka cewa cikakken takarda ne da za a iya tantancewa.