Eng PHP-cURL-Iwwerdroung no engem Body-Prefix stoppen
Behält en begrenzte Prefix an engem Write-Callback a erkennt nëmmen dee Schreibfehler, deen dee Callback bewosst verursaacht.
E cURL-Write-Callback kann e begrenzte Body-Prefix behalen an d'Iwwerdroung stoppen, soubal dës Grenz erreecht ass. Benotzt Ären eegene Fändel, fir déi bewosst Stopp vun engem anere Schreibfehler z'ënnerscheeden.
Fir en neien Handle, deem seng Zil-URL schonn ageriicht ass:
$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);
}
D'socks5h-Schema vun der Proxy-URL freet de Proxy, den Zilhostname opzeléisen. Fir en erlaabten Test géint en ëffentlecht Zil um gewisenen neien Handle kann en Agang ouni Kont aus der SOCKS5-Proxy-Lëscht deen Endpunkt ubidden. D'TLS-Zertifikatspréifung behält hir normal Astellungen.
Null zréckzeginn fir e net-eidelen Deel seet libcurl, datt de Callback déi geliwwert Donnéeën net ugeholl huet. Et brécht mat CURLE_WRITE_ERROR of. Hei gëtt nëmmen d'Kombinatioun aus dësem Fehler an dem limitReached-Fändel vum Callback als erwaart ugesinn.
Eng Äntwert déi méi kuerz ass wéi d'Grenz enthält normal. Op oder iwwer der Grenz hält prefix héchstens 32 KiB, och wann de leschte Callback e méi groussen Deel kritt. D'Gréisste vun den Deeler variéieren; eng ugefrote Puffergréisst ass keng Verspriechen op Opruffer vu fester Längt.
Dëst begrenzt de behalen Body, net all Byte deen nach am Puffer ass oder iwwer d'Verbindung iwwerdroe gouf. De Prefix kann an engem Multibyte-Zeechen, engem JSON-Wäert oder engem HTML-Element ophalen, also gitt net dovun aus, datt et en kompletten analysierbaren Dokument ass.