Выбор локального интерфейса и прокси в одной передаче cURL
Используйте CURLOPT_INTERFACE для локального источника и CURLOPT_PROXY для посредника, учитывая маршрутизацию ОС и NAT.
Машине с несколькими локальными адресами может понадобиться один из них для соединения с вышестоящим прокси. cURL позволяет явно задать оба выбора:
curl_setopt_array($handle, [
CURLOPT_URL => 'https://example.com/',
CURLOPT_INTERFACE => '192.0.2.20',
CURLOPT_PROXY => 'http://proxy.example:8080',
]);
Это иллюстративная конфигурация для существующего дескриптора cURL. Замените 192.0.2.20 на адрес источника, который действительно доступен на машине, где выполняется PHP. Для разрешённого публичного запроса без учётной записи прокси список HTTP-прокси может предоставить удалённый прослушиватель для значения прокси.
CURLOPT_INTERFACE выбирает локальную сторону исходящего соединения. CURLOPT_PROXY выбирает посредника, который передаёт запрос дальше. Выбор локального источника не превращает эту машину в удалённый прокси и не даёт ей произвольный публичный IP.
На этом пути локальный выбор влияет на соединение в сторону прокси. Сайт обычно видит следующий адрес источника прокси. NAT между любой парой может дополнительно транслировать адрес, который видит каждый получатель.
Если выбор интерфейса не задан, libcurl позволяет стеку TCP выбрать подходящий источник. Этот выбор следует сетевой конфигурации машины; это не универсальное правило, будто побеждает первый адрес в файле конфигурации.
libcurl принимает имена интерфейсов на поддерживаемых платформах, но его документация исключает выбор имени интерфейса Windows для этой опции. Использование hostname также может вызвать блокирующий поиск. Известный локальный адрес — более понятный ввод, когда именно этот выбор подразумевает приложение.