Передачи multi-cURL завершаются в своём порядке. Если вы назначили каждому handle свой прокси, первый завершившийся результат не обязательно относится к первому прокси из вашего входного списка.

Прикрепляйте стабильный идентификатор передачи при настройке каждого handle. Если вы тестируете выбираемые публичные конечные точки, список HTTP-прокси предоставляет HTTP-кандидатов. PHP предоставляет механизм приватных данных libcurl:

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

Когда curl_multi_info_read() сообщает о завершённой передаче, используйте возвращённый handle, чтобы получить идентификатор:

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

Ведите запись приложения с ключом по этому идентификатору, содержащую назначение, настроенный прокси и номер попытки. Повторная попытка через другой прокси заслуживает новой записи попытки, даже если она относится к той же общей задаче.

Держите три вида адресов раздельно

Настроенная конечная точка прокси — это адрес, передаваемый cURL. Адрес узла соединения описывает сетевое соединение, которое открыл cURL. Исходящий IP, который видит назначение, — это информация, сообщаемая с другой стороны. Они могут различаться, особенно при цепных прокси или прокси, управляемых провайдером.

Приватные метаданные фиксируют задуманную конфигурацию; они не могут доказать, какой IP наблюдало назначение. И наоборот, IP-ответ назначения не сообщает автоматически, какой handle в вашей программе его создал.

Храните безопасный идентификатор прокси в обычных журналах. Если полная конечная точка содержит учётные данные, запись этого URL при каждой неудачной передаче распространяет пароль по всему вашему сборнику ошибок.

Этот небольшой шаг учёта облегчает чтение смешанных результатов: одна задача, одна попытка, один выбранный прокси и один фактический результат. Он также позволяет избежать зависимости от случайных представлений handle, которые изменились между cURL API PHP на основе ресурсов и на основе объектов.

Похожие статьи