Ndalja e një transferimi PHP cURL pas një prefiksi të trupit
Mbani një prefiks të kufizuar në një callback shkrimi dhe njihni vetëm gabimin e shkrimit që shkakton qëllimisht ai callback.
Një callback shkrimi i cURL mund të mbajë një prefiks të kufizuar të trupit dhe ta ndalojë transferimin sapo arrihet ky kufi. Përdorni flamurin tuaj për të dalluar atë ndalim të qëllimshëm nga një dështim tjetër shkrimi.
Për një handle të ri, URL-ja e synuar e të cilit është konfiguruar tashmë:
$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);
}
Skema socks5h e URL-së së proxy-t i kërkon proxy-t të zgjidhë emrin e hostit të synuar. Për një test të lejuar ndaj një caku publik në handle-in e ri të paraqitur, një zë pa llogari nga lista e proxy-ve SOCKS5 mund të sigurojë atë endpoint. Verifikimi i certifikatës TLS mban cilësimet e tij normale.
Kthimi i zeros për një copë jo të zbrazët i thotë libcurl-it se callback-u nuk i pranoi të dhënat e ofruara. Ai ndërpritet me CURLE_WRITE_ERROR. Këtu si i pritur konsiderohet vetëm kombinimi i atij gabimi dhe flamurit limitReached të callback-ut.
Një përgjigje më e shkurtër se kufiri përfundon normalisht. Në ose mbi kufi, prefix mban më së shumti 32 KiB edhe nëse callback-u i fundit merr një copë më të madhe. Madhësitë e copave ndryshojnë; një madhësi buferi e kërkuar nuk është premtim për thirrje me gjatësi fikse.
Kjo kufizon trupin e mbajtur, jo çdo bajt të ruajtur tashmë në bufer ose të transferuar në lidhje. Prefiksi mund të përfundojë brenda një karakteri shumëbajtësh, një vlere JSON ose një elementi HTML, prandaj mos supozoni se është një dokument i plotë i analizueshëm.