Какой прокси использовал этот запрос PHP cURL?
Различайте настроенный прокси, подключённый узел и публичный выход, который видит назначение.
«Получить прокси» в приложении 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 отвечает на третий вопрос. Её ответ может описывать выход за прокси, тогда как настроенное имя хоста разрешается в другой вход. Ни один из адресов не должен подменяться другим в настройках приложения.