PHP cURL rakstīšanas atzvanīšanas funkcijām jāatgriež apstrādāto baitu skaits
Ievērojiet baitu skaita līgumu, patērējot proxy atbildes daļas, un atšķiriet vietēju rakstīšanas kļūdu no neveiksmīga proxy savienojuma.
Proxy piegādā datus. Jūsu rakstīšanas atzvanīšanas funkcija atgriež nepareizu vērtību. Tad libcurl pārtrauc, un apkārtējais kods ziņo vēl vienu “proxy lejupielādes kļūdu”.
Atzvanīšanas funkcijai jāziņo, cik saņemtu baitu tā faktiski apstrādāja. Cita skaitļa atgriešana nozīmē kļūdu. Ja rakstīšanas mērķis apzināti bloķē, fragments var izskatīties šādi:
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;
}
);Tas pieņem, ka esošā lietojumprogramma pārvalda handle un rakstīšanas mērķi. Neveiksmīga vai īsa rakstīšana pārtrauc, nevis klusi apgalvo, ka viss fragments ir saglabāts. Nebloķējošam mērķim nepieciešams atbilstošs buferēšanas un pauzes/atsākšanas dizains; mazais fragments to nenodrošina.
Skaitiet baitus, nevis parādītās rakstzīmes. Dati var būt bināri vai daudzbaitu teksta secības daļa. Viens izsaukums ne vienmēr ir viena rinda, viens JSON dokuments vai viens pakalpojuma ziņojums.
Inkrementālai parsēšanai nepieciešams savs stāvoklis starp izsaukumiem. Pretēji, katra fragmenta uzkrāšana līdz pabeigšanai var būt pareiza mazai ierobežotai atbildei, bet tā nav atmiņas politika lielai vai bezgalīgai plūsmai.
Saglabājiet pārsūtīšanas rezultātu un atzvanīšanas kļūdas pierādījumus. Vietēja diska kļūda vai parsera pārtraukšana var notikt pēc derīga proxy maršruta izveides. Ja plānojat apstāties pēc prefiksa, atzīmējiet šo tīšo atzvanīšanas apstāšanos atsevišķi. Proxy adreses nomaiņa nevar salabot mērķi, kas pārstāja pieņemt datus.