PHP cURL-skrivekald skal returnere antallet af håndterede bytes
Overhold byte-antal-kontrakten, når du forbruger svarchunks fra proxyen, og skel mellem en lokal skrivefejl og en mislykket proxyforbindelse.
Proxyen leverer data. Dit skrivekald returnerer den forkerte værdi. Derefter afbryder libcurl, og den omkringliggende kode rapporterer endnu en “proxy-downloadfejl”.
Kaldet skal rapportere, hvor mange modtagne bytes det faktisk håndterede. Returneres et andet antal, signalerer det fejl. For et bevidst blokerende skrivemål kan et fragment se sådan ud:
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;
}
);Det forudsætter, at den eksisterende applikation ejer handle og skrivemål. En mislykket eller kort skrivning afbryder i stedet for i stilhed at påstå, at hele chunken blev gemt. Et ikkeblokerende mål kræver et passende buffer- og pause/genoptag-design; det lille fragment giver ikke et sådant.
Tæl bytes, ikke viste tegn. Dataene kan være binære eller en del af en multibyte-tekstsekvens. Et kald er ikke nødvendigvis én linje, ét JSON-dokument eller én meddelelse fra tjenesten.
Inkrementel parsing kræver sin egen tilstand mellem kald. Omvendt kan ophobning af hver chunk indtil afslutning være korrekt for et lille afgrænset svar, men er ikke en hukommelsespolitik for en stor eller endeløs strøm.
Bevar transferresultatet og beviset for kaldets fejl. En lokal diskfejl eller parserafbrydelse kan opstå, efter en gyldig proxyrute er etableret. Hvis du vil stoppe efter et præfiks, markér det bevidste kaldstop særskilt. At udskifte proxyadressen kan ikke reparere et mål, der er holdt op med at acceptere data.