As transferências multi-cURL terminam na sua própria ordem. Se atribuiu um proxy diferente a cada handle, o primeiro resultado concluído não pertence necessariamente ao primeiro proxy da sua lista de entrada.

Anexe um identificador de transferência estável ao configurar cada handle. Se está a testar endpoints públicos selecionáveis, a lista de proxies HTTP fornece candidatos HTTP. O PHP expõe o mecanismo de dados privados do libcurl:

$id = 'job-17';
curl_setopt($handle, CURLOPT_PROXY, 'http://203.0.113.10:8080');
curl_setopt($handle, CURLOPT_PRIVATE, $id);

Quando curl_multi_info_read() reporta uma transferência concluída, use o handle devolvido para recuperar o identificador:

$id = curl_getinfo($message['handle'], CURLINFO_PRIVATE);

Mantenha um registo de aplicação indexado por esse identificador contendo o destino, o proxy configurado e o número da tentativa. Uma nova tentativa através de outro proxy merece um novo registo de tentativa, mesmo que pertença ao mesmo trabalho global.

Mantenha três tipos de endereço separados

O endpoint do proxy configurado é o endereço fornecido ao cURL. O endereço par de uma ligação descreve a ligação de rede que o cURL abriu. Um IP de saída observado pelo destino é informação reportada do outro lado. Podem diferir, especialmente com proxies encadeados ou geridos pelo fornecedor.

Os metadados privados registam a configuração pretendida; não podem provar qual IP o destino observou. Inversamente, a resposta IP de um destino não lhe diz automaticamente qual handle do seu programa a produziu.

Guarde um identificador de proxy seguro nos registos de rotina. Se o endpoint completo contiver credenciais, registar esse URL em cada transferência falhada espalha a palavra-passe por toda a sua coleção de erros.

Este pequeno passo de contabilidade torna os resultados mistos mais fáceis de ler: um trabalho, uma tentativa, um proxy selecionado e um resultado real. Também evita depender de representações acidentais do handle que mudaram entre as APIs cURL do PHP baseadas em recursos e em objetos.

Artigos relacionados