Stopp ein PHP cURL-overføring etter eit body-prefiks
Hald på eit avgrensa prefiks i eit write-callback og kjenna att berre skrivefeilen som callbacket sjølv valdar med vilje.
Eit cURL-write-callback kan halda på eit avgrensa prefiks av bodyen og stoppa overføringa når grensa er nådd. Bruk din eigen flagg for å skilja den medvite stoppen frå ein annan skrivefeil.
For eit nytt handle der mål-URL-en alt er sett opp:
$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-skjemaet i proxy-URL-en ber proxyen slå opp vertsnamnet. For ein tillaten test mot eit offentleg mål på det viste nye handlet kan ei oppføring utan konto frå SOCKS5-proxylista levera det endepunktet. TLS-sertifikatkontrollen held på dei vanlege innstillingane.
Å returnera null for ein ikkje-tom del fortel libcurl at callbacket ikkje tok imot dataa som vart sende. Det bryt av med CURLE_WRITE_ERROR. Her vert berre kombinasjonen av den feilen og limitReached-flagget til callbacket rekna som venta.
Eit svar som er kortare enn grensa, endar normalt. På eller over grensa held prefix høgst 32 KiB, sjølv om det siste callbacket får ein større del. Delstorleikar varierer; ein ønskt bufferstorleik er ikkje eit løfte om kall med fast lengd.
Dette avgrensar bodyen som vert halden på, ikkje kvar byte som alt er bufra eller overført på sambandet. Prefikset kan enda midt i eit multibyte-teikn, ein JSON-verdi eller eit HTML-element, så ikkje gå ut frå at det er eit fullstendig dokument som kan tolkast.