Qual proxy essa transferência PHP multi-cURL usou?
Mantenha os metadados do proxy com cada handle cURL e distinga a rota configurada de um IP de saída observado pelo destino.
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.