PHP cURL átvitel leállítása egy törzs-előtag után
Tartson korlátozott előtagot egy írás-callbackben, és csak azt az írási hibát ismerje fel, amelyet ez a callback szándékosan okoz.
A cURL írás-callbackje megtarthat egy korlátozott törzs-előtagot, és leállíthatja az átvitelt, amint ezt a határt eléri. Saját jelzővel különböztesse meg ezt a szándékos leállást egy másik írási hibától.
Egy friss handle esetén, amelynek cél-URL-je már be van állítva:
$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);
}
A proxy URL socks5h sémája arra kéri a proxyt, hogy oldja fel a cél hosztnevet. A bemutatott friss handle-en végzett engedélyezett nyilvános célú teszthez a SOCKS5 proxy lista egy fiók nélküli bejegyzése biztosíthatja ezt a végpontot. A TLS-tanúsítvány ellenőrzése megtartja szokásos beállításait.
Ha egy nem üres darabra nullát ad vissza, az a libcurlnek azt jelzi, hogy a callback nem fogadta el a kapott adatokat. CURLE_WRITE_ERROR hibával szakítja meg. Itt csak e hiba és a callback limitReached jelzőjének együttállását tekintjük vártnak.
A határnál rövidebb válasz normálisan fejeződik be. A határon vagy felette a prefix legfeljebb 32 KiB-ot tart, akkor is, ha az utolsó callback nagyobb darabot kap. A darabméretek változnak; a kért pufferméret nem ígér rögzített hosszúságú hívásokat.
Ez a megtartott törzset korlátozza, nem minden már pufferelt vagy a kapcsolaton átvitt bájtot. Az előtag többbájtos karakter, JSON-érték vagy HTML-elem közepén végződhet, ezért ne feltételezze, hogy teljesen elemezhető dokumentum.