O proxy entrega datos. A túa función de escritura devolve o valor incorrecto. Entón libcurl aborta e o código circundante informa doutro «fallo de descarga a través do proxy».

A función debe informar de cantos bytes recibidos xestionou realmente. Devolver un reconto distinto indica fallo. Para un destino de escritura deliberadamente bloqueante, un fragmento pode ser así:

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

Isto supón que a aplicación existente posúe o handle e o destino de escritura. Unha escritura fallida ou curta aborta en lugar de afirmar en silencio que se gardou todo o fragmento. Un destino non bloqueante necesita un deseño axeitado de almacenamento e pausa/reanudación; o fragmento pequeno non o proporciona.

Conta bytes, non caracteres mostrados. Os datos poden ser binarios ou parte dunha secuencia de texto multibyte. Unha chamada non é necesariamente unha liña, un documento JSON nin unha mensaxe do servizo.

A análise incremental necesita o seu propio estado entre chamadas. Pola contra, acumular cada fragmento ata completalo pode ser correcto para unha resposta pequena e limitada, pero non é unha política de memoria para un fluxo grande ou interminable.

Conserva o resultado da transferencia e as probas do fallo da función. Un erro local de disco ou un aborto do analizador pode ocorrer despois de estabelecer unha ruta de proxy válida. Se pretendes deterte tras un prefixo, marca esa detención deliberada por separado. Substituír o enderezo do proxy non pode reparar un destino que deixou de aceptar datos.

Artigos relacionados