Выберите исходящий ip для запроса curl

У меня есть сервер с двумя разными IP-адресами. Мне нужно отправлять нечетные запросы скручивания с первого IP-адреса и даже со второго. Как выбрать исходящий IP-адрес?

Мой PHP-скрипт выглядит примерно так:

$curlh = curl_init($url);
curl_setopt($curlh, CURLOPT_USERAGENT, $uagent);
curl_setopt($curlh, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curlh);

Как я могу это сделать?

2 ответа

Вы можете попробовать установить CURLOPT_INTERFACE опция:

curl_setopt($curlh, CURLOPT_INTERFACE, "xxx.xxx.xxx.xxx");

CURLOPT_INTERFACE: имя используемого исходящего сетевого интерфейса. Это может быть имя интерфейса, IP-адрес или имя хоста.

От: php Руководство: curl_setopt


РЕДАКТИРОВАТЬ: Исправление примера, как указал @Michael Hart в другом ответе.

Поскольку я пока не могу ответить, просто хотел добавить ответ Даниэля Вассалло. Хотя он прав, его пример - нет.

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

curl_setopt($curlh, CURLOPT_INTERFACE, "xxx.xxx.xxx.xxx");

Кроме того, для систем Linux (и я уверен, что Windows, но это будет не совсем то же самое), я чувствую, что вам не нужно использовать IP-адрес. Если вы знаете интерфейс ethN, вы можете просто использовать "eth0", "eth1" или "eth0:0" в зависимости от того, как настроена ваша сеть. Это может быть более предпочтительным, поскольку код не будет специфичным для 1 машины и может вписываться в более широкую конфигурацию (например, кластеры).

Другие вопросы по тегам