Las transferencias multi-cURL terminan en su propio orden. Si asignó un proxy diferente a cada handle, el primer resultado completado no pertenece necesariamente al primer proxy de su lista de entrada.

Adjunte un identificador de transferencia estable mientras configura cada handle. Si está probando puntos de conexión públicos seleccionables, la lista de proxies HTTP proporciona candidatos HTTP. PHP expone el 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);

Cuando curl_multi_info_read() informa de una transferencia completada, use el handle devuelto para recuperar el identificador:

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

Mantenga un registro de aplicación indexado por ese identificador que contenga el destino, el proxy configurado y el número de intento. Un reintento a través de otro proxy merece un nuevo registro de intento, aunque pertenezca al mismo trabajo general.

Mantenga tres tipos de dirección separados

El punto de conexión del proxy configurado es la dirección entregada a cURL. La dirección del par de una conexión describe la conexión de red que abrió cURL. Una IP de salida observada por el destino es información reportada desde el otro lado. Pueden diferir, especialmente con proxies encadenados o gestionados por el proveedor.

Los metadatos privados registran su configuración prevista; no pueden demostrar qué IP observó el destino. A la inversa, la respuesta IP de un destino no le dice automáticamente qué handle de su programa la produjo.

Guarde un identificador de proxy seguro en los registros rutinarios. Si el punto de conexión completo contiene credenciales, registrar esa URL por cada transferencia fallida propaga la contraseña por toda su colección de errores.

Este pequeño paso de contabilidad facilita leer los resultados mixtos: un trabajo, un intento, un proxy seleccionado y un resultado real. También evita depender de representaciones incidentales del handle que cambiaron entre las API de cURL de PHP basadas en recursos y basadas en objetos.

Artículos relacionados