Steðga eini PHP cURL-flutningi eftir eitt body-prefiks
Varðveit eitt avmarkað prefiks í einum skriva-callback og kenn bara ta skrivivilluna, sum hetta callbackið ger av ásettu ráði.
Eitt cURL-skriva-callback kann varðveita eitt avmarkað prefiks av body-inum og steðga flutninginum, tá ið henda markið er náð. Brúka títt egna flagg til at skilja hetta tilvitaða steðgið frá eini aðrari skrivivillu.
Fyri eitt nýtt handle, hvørs mál-URL longu er sett upp:
$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-skipanin í proxy-URL-inum biður proxy-in loysa málhost-navnið upp. Fyri eina loyvda roynd móti einum almennum máli á tí vísta nýggja handle-inum kann ein postur uttan konto frá SOCKS5-proxy-listanum veita hendan endpointin. TLS-samskirnið varðveitir vanligu stillingarnar.
At lata null aftur fyri ein ikki-tom bit sigur libcurl, at callbackið tók ikki ímóti teimum givnu dáta. Tað steðgar við CURLE_WRITE_ERROR. Her verður bara samansetingin av tí villuni og limitReached-flagginum hjá callbackinum mett sum væntað.
Eitt svar, sum er styttri enn markið, endar vanliga. Á markinum ella yvir heldur prefix í mesta lagi 32 KiB, sjálvt um seinasta callbackið fær ein størri bit. Bitstøddir broytast; ein umbidin bufferstødd er ikki eitt lyfti um køll av føstum longd.
Hetta avmarkar tað varðveitta body-ið, ikki hvønn einasta byte, sum longu er buffraður ella fluttur á sambandinum. Prefiksið kann enda inni í einum fleirbýtis-tekni, einum JSON-virði ella einum HTML-elementi, so antaka ikki, at tað er eitt fullkomið dokument, sum kann greinast.