Stopio trosglwyddiad PHP cURL ar ôl rhagddodiad corff
Cadwch ragoddiad cyfyngedig mewn callback ysgrifennu a chydnabyddwch yn unig y gwall ysgrifennu a achosir yn fwriadol gan y callback hwnnw.
Gall callback ysgrifennu cURL gadw rhagddodiad cyfyngedig o'r corff a stopio'r trosglwyddiad unwaith y cyrhaeddir y terfyn hwnnw. Defnyddiwch eich fflag eich hun i wahaniaethu'r stop bwriadol hwnnw oddi wrth fethiant ysgrifennu arall.
Ar gyfer handl newydd y mae ei URL targed eisoes wedi'i ffurfweddu:
$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);
}
Mae cynllun socks5h URL y dirprwy yn gofyn i'r dirprwy ddatrys enw'r lluosydd targed. Ar gyfer prawf cyhoeddus a ganiateir ar y handl newydd a ddangosir, gall cofnod heb gyfrif o'r rhestr ddirprwyon SOCKS5 ddarparu'r pwynt terfyn hwnnw. Mae dilysu tystysgrif TLS yn cadw ei osodiadau arferol.
Mae dychwelyd sero ar gyfer darn nad yw'n wag yn dweud wrth libcurl na dderbyniodd y callback y data a gyflenwyd. Mae'n terfynu â CURLE_WRITE_ERROR. Dim ond cyfuniad y gwall hwnnw a fflag limitReached y callback sy'n cael ei drin fel un disgwyliedig yma.
Mae ymateb sy'n fyrrach na'r terfyn yn gorffen fel arfer. Ar neu uwch y terfyn, mae prefix yn dal 32 KiB ar y mwyaf hyd yn oed os yw'r callback olaf yn cael darn mwy. Mae meintiau darnau yn amrywio; nid yw maint byffer a ofynnir yn addewid o alwadau o hyd sefydlog.
Mae hyn yn cyfyngu'r corff a gedwir, nid pob beit sydd eisoes wedi'i fwffro neu wedi'i drosglwyddo ar y cysylltiad. Gall y rhagddodiad orffen y tu mewn i gymeriad aml-beit, gwerth JSON neu elfen HTML, felly peidiwch â thybio bod yn ddogfen gyflawn y gellir ei dosrannu.