Que proxy usou esa transferencia multi-cURL de PHP?
Manteña os metadatos do proxy con cada handle de cURL e distinga a ruta configurada dunha IP de saída observada polo destino.
As transferencias multi-cURL rematan na súa propia orde. Se asignou un proxy diferente a cada handle, o primeiro resultado completado non pertence necesariamente ao primeiro proxy da súa lista de entrada.
Anexe un identificador de transferencia estable mentres configura cada handle. Se está a probar puntos de conexión públicos seleccionables, a lista de proxies HTTP fornece candidatos HTTP. PHP expón o mecanismo de datos privados de libcurl:
$id = 'job-17';
curl_setopt($handle, CURLOPT_PROXY, 'http://203.0.113.10:8080');
curl_setopt($handle, CURLOPT_PRIVATE, $id);
Cando curl_multi_info_read() informa dunha transferencia completada, use o handle devolto para recuperar o identificador:
$id = curl_getinfo($message['handle'], CURLINFO_PRIVATE);
Manteña un rexistro de aplicación indexado por ese identificador que conteña o destino, o proxy configurado e o número de intento. Un reintento a través doutro proxy merece un novo rexistro de intento, aínda que pertenza ao mesmo traballo global.
Manteña tres tipos de enderezo separados
O punto de conexión do proxy configurado é o enderezo fornecido a cURL. O enderezo do par dunha conexión describe a conexión de rede que abriu cURL. Unha IP de saída observada polo destino é información reportada desde o outro lado. Poden diferir, especialmente con proxies encadeados ou xestionados polo provedor.
Os metadatos privados rexistran a súa configuración prevista; non poden demostrar que IP observou o destino. Á inversa, a resposta IP dun destino non lle di automaticamente que handle do seu programa a produciu.
Garde un identificador de proxy seguro nos rexistros rutineiros. Se o punto de conexión completo contén credenciais, rexistrar esa URL por cada transferencia fallida propaga o contrasinal por toda a súa colección de erros.
Este pequeno paso de contabilidade facilita ler os resultados mixtos: un traballo, un intento, un proxy seleccionado e un resultado real. Tamén evita depender de representacións incidentais do handle que cambiaron entre as API de cURL de PHP baseadas en recursos e en obxectos.