Stop in PHP cURL-oerdracht nei in lichemsfoarheaksel
Hâld in beheind foarheaksel yn in skriuw-callback by en werken dy skriuwflater allinnich, dy't dy callback bewust feroarsaket.
In cURL-skriuw-callback kin in beheind lichemsfoarheaksel bewarje en de oerdracht stopje sadree't dy limyt berikt is. Brûk jo eigen flagge om dy bewuste stop fan in oare skriuwflater te ûnderskieden.
Foar in nije handle wêrfan't de doel-URL al ynsteld is:
$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);
}
It socks5h-skema fan 'e proxy-URL freget de proxy om de doelhostnamme op te lossen. Foar in tastiene test tsjin in iepenbier doel op 'e toande nije handle kin in ynskriuwing sûnder akkount út 'e SOCKS5-proxylist dat einpunt leverje. TLS-sertifikaatferifikaasje hâldt syn normale ynstellings.
Nul weromjaan foar in net-lege stik fertelt libcurl dat de callback de oanlevere gegevens net akseptearre hat. It brekt ôf mei CURLE_WRITE_ERROR. Hjir wurdt allinnich de kombinaasje fan dy flater en de limitReached-flagge fan 'e callback as ferwachte beskôge.
In antwurd koarter as de limyt einiget normaal. Op of boppe de limyt hâldt prefix maksimaal 32 KiB, sels as de lêste callback in grutter stik krijt. Stikgrutten ferskille; in frege buffersgrutte is gjin belofte fan oproppen fan fêste lingte.
Dit beheint it bewarre lichem, net elk byte dat al buffere of oer de ferbining oerdroegen is. It foarheaksel kin einigje yn in multibyte-teken, in JSON-wearde of in HTML-elemint, dat nim dus net oan dat it in folslein parseber dokumint is.