выберите исходящий ip для запроса curl - PullRequest
35 голосов
/ 11 марта 2010

У меня есть сервер с двумя разными 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 ]

53 голосов
/ 11 марта 2010

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

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

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

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


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

25 голосов
/ 21 ноября 2010

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

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

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

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

...