web-dev-qa-db-fra.com

sélectionner l'IP sortant pour la demande de boucle

J'ai un serveur avec deux IP différentes. J'ai besoin d'envoyer des demandes curl curieuses à partir de la première IP, et même de la seconde. Comment sélectionner l'adresse IP sortante?

Mon script PHP est quelque chose comme ceci:

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

Comment faire?

35
Sergey

Vous pouvez essayer de définir le CURLOPT_INTERFACE option:

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

CURLOPT_INTERFACE: Le nom de l'interface réseau sortante à utiliser. Il peut s'agir d'un nom d'interface, d'une adresse IP ou d'un nom d'hôte.

De: php Manual: curl_setopt


EDIT: Exemple de correction, comme @ Michael Hart l'a souligné indiqué dans l'autre réponse.

55
Daniel Vassallo

Comme je ne peux pas encore répondre, je voulais juste ajouter quelque chose à la réponse de Daniel Vassallo. S'il a raison, son exemple ne l'est pas.

CURLOPT_INTERFACE est une constante et ne peut pas être placée entre guillemets. Cela pourrait causer un peu de confusion à certains qui peuvent copier et coller uniquement pour découvrir que cela ne fonctionne pas. Le bon code serait:

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

De plus, pour les systèmes Linux (et je suis sûr que Windows, mais ce ne sera pas exactement la même chose), j'ai envie de souligner que vous n'avez pas besoin d'utiliser l'adresse IP. Si vous connaissez l'interface ethN, vous pouvez simplement utiliser "eth0", "eth1" ou "eth0: 0" selon la configuration de votre réseau. Cela peut être plus préférable, car le code ne sera pas spécifique à 1 machine et pourrait s'insérer dans une configuration plus large (par exemple, les clusters).

26
Michael