Dá gbigbe PHP cURL dúró lẹ́yìn àkọ́kọ́ ara
Pa àkọ́kọ́ tí ó ní ààlà mọ́ nínú write callback kí o sì dá àṣìṣe kíkọ tí callback yẹn ṣe pẹ̀lú ìmọ̀ mọ̀.
write callback cURL lè pa àkọ́kọ́ ara tí ó ní ààlà mọ́ kí ó sì dá gbigbe dúró ní kété tí ààlà yẹn bá dé. Lo àsíá rẹ láti ṣe ìyàtọ̀ láàárín ìdúró ìmọ̀ yẹn àti àṣìṣe kíkọ mìíràn.
Fún handle tuntun tí URL àfojúsùn rẹ̀ ti wà tẹ́lẹ̀:
$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);
}
Ètò socks5h nínú URL proxy béèrè fún proxy láti yanjú orúkọ host àfojúsùn. Fún ìdánwò àfojúsùn gbogbo ènìyàn tí a gbà láàyè lórí handle tuntun tí a fihàn, àkọsílẹ̀ tí kò ní àkọsílẹ̀ láti àkójọ proxy SOCKS5 lè pèsè endpoint yẹn. Ìjẹ́rìí ìwé-ẹ̀rí TLS ń pa àwọn ètò deede rẹ̀ mọ́.
Pípada òdo fún ipin tí kò ṣófo sọ fún libcurl pé callback kò gba dátà tí a pèsè. Ó dáwọ́ dúró pẹ̀lú CURLE_WRITE_ERROR. Níbí, àpapọ̀ àṣìṣe yẹn pẹ̀lú àsíá limitReached callback ni a kà sí ohun tí a retí.
Ìdáhùn tí ó kúrú ju ààlà lọ máa ń parí ní deede. Ní ààlà tàbí ju bẹ́ẹ̀ lọ, prefix ń pa 32 KiB pọ̀ jù, bí ó tilẹ̀ jẹ́ pé callback ìkẹyìn gba ipin tó tóbi. Ìwọ̀n àwọn ipin yàtọ̀; ìwọ̀n buffer tí a béèrè kì í ṣe ìlérí fún àwọn ìpè tí gígùn wọn kò yí padà.
Èyí ń fi ààlà de ara tí a pa mọ́, kì í ṣe gbogbo byte tí a ti fi sínú buffer tàbí tí a ti gbé lórí ìsopọ̀. Àkọ́kọ́ lè parí nínú ìkọ̀wé byte púpọ̀, iye JSON tàbí ẹ̀yà HTML, nítorí náà má ṣe rò pé ó jẹ́ àkọsílẹ̀ pípé tí a lè ṣàyẹ̀wò.