«Получить прокси» в приложении PHP cURL может означать три разные вещи. Решите, какое наблюдение вам нужно, прежде чем добавлять ещё один запрос.

ВопросГде смотреть
Какую конечную точку настроило приложение?Конфигурация, переданная дескриптору
Использовался ли прокси для этой передачи?Сведения о передаче, где это поддерживается
Какой публичный адрес увидел сайт?Наблюдение на этом назначении

Храните выбранную конечную точку рядом с дескриптором или объектом запроса. curl_getinfo — это интерфейс сведений о передаче, а не универсальный геттер для каждого ранее заданного значения CURLOPT. Хранить конфигурацию приложения проще, чем пытаться перехватывать вызовы curl_setopt.

Изучите завершённую передачу

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

$peer = curl_getinfo($ch, CURLINFO_PRIMARY_IP);
$usedProxy = defined('CURLINFO_USED_PROXY')
    ? curl_getinfo($ch, constant('CURLINFO_USED_PROXY'))
    : null;

CURLINFO_USED_PROXY добавлен в libcurl в версии 8.7.0 и предоставляется совместимыми сборками PHP. Его результат сообщает об использовании прокси, а не о полном URL выбранного прокси. Если константа недоступна, null выше означает, что наблюдение недоступно, а не что запрос шёл напрямую.

Читайте эти значения, пока дескриптор ещё описывает нужную операцию. Неудачное соединение может не дать полезного адреса узла, а явный прокси всё ещё может быть обойдён подходящим исключением.

Конечная точка проверки IP отвечает на третий вопрос. Её ответ может описывать выход за прокси, тогда как настроенное имя хоста разрешается в другой вход. Ни один из адресов не должен подменяться другим в настройках приложения.

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