PHP cURL -siirron pysäyttäminen runkoetuliitteen jälkeen
Pidä rajoitettu etuliite write-callbackissa ja tunnista vain se kirjoitusvirhe, jonka callback aiheuttaa tarkoituksella.
cURL:n write-callback voi säilyttää rajoitetun runkoetuliitteen ja pysäyttää siirron, kun raja saavutetaan. Käytä omaa lippua erottamaan tarkoituksellinen pysäytys muusta kirjoitusvirheestä.
Uudelle handlelle, jonka kohde-URL on jo määritetty:
$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);
}
Välityspalvelimen URL:n socks5h-skeema pyytää välityspalvelinta selvittämään kohdeisäntänimen. Näytetyn uuden handlen sallittuun julkisen kohteen testiin SOCKS5-välityspalvelinluettelon tilittömän merkinnän voi tarjota kyseisen päätepisteen. TLS-varmenteen vahvistus säilyttää normaaliasetuksensa.
Nollan palauttaminen ei-tyhjälle palalle kertoo libcurlille, että callback ei hyväksynyt annettuja tietoja. Se keskeytyy virheeseen CURLE_WRITE_ERROR. Tässä vain kyseisen virheen ja callbackin limitReached-lipun yhdistelmä katsotaan odotetuksi.
Raja-arvoa lyhyempi vastaus päättyy normaalisti. Rajalla tai sen yli prefix säilyttää enintään 32 KiB, vaikka viimeinen callback saisi suuremman palan. Palakoot vaihtelevat; pyydetty puskurikoko ei ole lupaus kiinteän mittaisista kutsuista.
Tämä rajoittaa säilytettyä runkoa, ei jokaista jo puskuroitua tai yhteydellä siirrettyä tavua. Etuliite voi päättyä monitavumerkin, JSON-arvon tai HTML-elementin sisään, joten älä oleta sen olevan täydellinen jäsennettävä asiakirja.