PHP cURL жазу қайта шақырулары өңделген байт санын қайтаруы керек
Прокси жауабының бөліктерін тұтынғанда байт саны шартын сақтаңыз және жергілікті жазу қатесін сәтсіз прокси қосылымынан ажыратыңыз.
Прокси деректерді жеткізеді. Сіздің жазу қайта шақыруыңыз қате мәнді қайтарады. Содан кейін libcurl тоқтайды, ал айналасындағы код тағы бір «прокси арқылы жүктеу сәтсіздігін» хабарлайды.
Қайта шақыру нақты қанша қабылданған байтты өңдегенін хабарлауы керек. Басқа санды қайтару сәтсіздікті білдіреді. Әдейі блоктайтын жазу қабылдағышы үшін үзінді осылай көрінуі мүмкін:
curl_setopt($handle, CURLOPT_PROXY, 'http://proxy.example:8080');
curl_setopt($handle, CURLOPT_WRITEFUNCTION,
function ($handle, $chunk) use ($sink) {
$written = fwrite($sink, $chunk);
return $written === false ? 0 : $written;
}
);Бұл қолданыстағы қосымша handle мен жазу қабылдағышына ие деп есептейді. Сәтсіз немесе қысқа жазу бүкіл үзінді сақталды деп үнсіз мәлімдеудің орнына тоқтайды. Блоктамайтын қабылдағышқа тиісті буферлеу және кідірту/жалғастыру дизайны қажет; шағын үзінді оны бермейді.
Көрсетілетін таңбаларды емес, байттарды санаңыз. Деректер екілік немесе көпбайттық мәтін тізбегінің бөлігі болуы мүмкін. Бір қайта шақыру міндетті түрде бір жол, бір JSON құжаты немесе қызметтен келген бір хабарлама емес.
Инкременттік талдауға қайта шақырулар арасында өз күйі қажет. Керісінше, әр бөлікті аяқталғанша жинау шағын шектеулі жауап үшін дұрыс болуы мүмкін, бірақ үлкен немесе шексіз ағын үшін жады саясаты емес.
Тасымалдау нәтижесін және қайта шақыру сәтсіздігінің дәлелін сақтаңыз. Жарамды прокси бағыты орнатылғаннан кейін жергілікті дискі қатесі немесе талдағыштың тоқтауы болуы мүмкін. Егер префикстен кейін тоқтағыңыз келсе, сол әдейі қайта шақыру тоқтауын бөлек белгілеңіз. Прокси мекенжайын ауыстыру деректерді қабылдауды тоқтатқан қабылдағышты жөндей алмайды.