PHP cURL rašymo atgaliniai iškvietimai turi grąžinti apdorotų baitų skaičių
Laikykitės baitų skaičiaus sutarties naudodami proxy atsakymo dalis ir atskirkite vietinę rašymo klaidą nuo nepavykusio proxy ryšio.
Proxy tiekia duomenis. Jūsų rašymo atgalinis iškvietimas grąžina neteisingą reikšmę. Tada libcurl nutraukia, o aplinkinis kodas praneša dar vieną „proxy atsisiuntimo klaidą“.
Atgalinis iškvietimas turi pranešti, kiek gautų baitų jis iš tikrųjų apdorojo. Kito skaičiaus grąžinimas reiškia klaidą. Jei rašymo paskirties vieta sąmoningai blokuojanti, fragmentas gali atrodyti taip:
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;
}
);Tai daro prielaidą, kad esama programa valdo handle ir rašymo paskirties vietą. Nepavykęs arba trumpas rašymas nutraukia, o ne tyliai teigia, kad visas fragmentas išsaugotas. Neblokuojančiai vietai reikia tinkamo buferizavimo ir pauzės/tęsimo sprendimo; mažas fragmentas to nepateikia.
Skaičiuokite baitus, o ne rodomus simbolius. Duomenys gali būti dvejetainiai arba daugiabaičio teksto sekos dalis. Vienas iškvietimas nebūtinai yra viena eilutė, vienas JSON dokumentas ar viena paslaugos žinutė.
Inkrementiniam analizavimui reikia savo būsenos tarp iškvietimų. Priešingai, kaupimas kiekvieną fragmentą iki pabaigos gali būti teisingas mažam ribotam atsakymui, bet tai nėra atminties politika dideliam ar begaliniam srautui.
Išsaugokite perdavimo rezultatą ir atgalinio iškvietimo klaidos įrodymus. Vietinė disko klaida arba analizatoriaus nutraukimas gali įvykti po to, kai nustatytas galiojantis proxy maršrutas. Jei ketinate sustoti po priešdėlio, pažymėkite tą sąmoningą atgalinio iškvietimo sustojimą atskirai. Proxy adreso pakeitimas negali pataisyti vietos, kuri nustojo priimti duomenis.