Proxy dodává data. Váš zapisovací callback vrací špatnou hodnotu. libcurl pak přeruší a okolní kód hlásí další „selhání stahování přes proxy“.

Callback musí hlásit, kolik přijatých bajtů skutečně zpracoval. Vrácení jiného počtu znamená selhání. Pro úmyslně blokující zapisovací cíl může fragment vypadat takto:

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;
    }
);

To předpokládá, že stávající aplikace vlastní handle a zapisovací cíl. Neúspěšný nebo krátký zápis přeruší, místo aby tiše tvrdil, že celý fragment byl uložen. Neblokující cíl potřebuje vhodný návrh bufferování a pozastavení/obnovení; malý fragment jej neposkytuje.

Počítejte bajty, ne zobrazené znaky. Data mohou být binární nebo součástí vícebajtové textové sekvence. Jeden callback nemusí být jeden řádek, dokument JSON ani zpráva od služby.

Inkrementální parsování potřebuje vlastní stav mezi callbacky. Naopak hromadění každého fragmentu do dokončení může být správné pro malou omezenou odpověď, ale není paměťovou politikou pro velký nebo nekonečný proud.

Uchovejte výsledek přenosu a důkazy o selhání callbacku. Lokální chyba disku nebo přerušení parseru může nastat po navázání platné trasy přes proxy. Pokud chcete po prefixu zastavit, označte toto úmyslné zastavení callbacku zvlášť. Nahrazení adresy proxy nemůže opravit cíl, který přestal přijímat data.

Související články