Выберите исходящий 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 машины и может вписываться в более широкую конфигурацию (например, кластеры).