As callbacks de escrita do PHP cURL devem devolver o número de bytes tratados
Respeite o contrato de contagem de bytes ao consumir fragmentos de resposta do proxy e distinga uma falha de escrita local de uma ligação proxy falhada.
O proxy entrega dados. O seu callback de escrita devolve o valor errado. O libcurl então aborta, e o código em volta relata outra «falha de transferência através do proxy».
O callback deve informar quantos bytes recebidos realmente tratou. Devolver uma contagem diferente sinaliza falha. Para um destino de escrita deliberadamente bloqueante, um fragmento pode ter este aspeto:
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 pressupõe que a aplicação existente detém o handle e o destino de escrita. Uma escrita falhada ou curta aborta em vez de afirmar em silêncio que todo o fragmento foi guardado. Um destino não bloqueante precisa de um desenho adequado de buffering e pausa/retoma; o pequeno fragmento não o fornece.
Conte bytes, não caracteres apresentados. Os dados podem ser binários ou parte de uma sequência de texto multibyte. Um callback não é necessariamente uma linha, um documento JSON ou uma mensagem do serviço.
A análise incremental precisa do seu próprio estado entre callbacks. Inversamente, acumular cada fragmento até à conclusão pode estar correto para uma resposta pequena e limitada, mas não é uma política de memória para um fluxo grande ou sem fim.
Guarde o resultado da transferência e as provas da falha do callback. Um erro local de disco ou um aborto do analisador pode ocorrer depois de estabelecida uma rota proxy válida. Se pretende parar após um prefixo, marque essa paragem deliberada do callback em separado. Substituir o endereço do proxy não pode reparar um destino que deixou de aceitar dados.