web-dev-qa-db-ja.com

curl要求の送信IPを選択します

2つの異なるIPを持つサーバーがあります。最初のIPから、さらには2番目のIPからも奇数のcurlリクエストを送信する必要があります。発信IPアドレスを選択するにはどうすればよいですか?

私のPHPスクリプトは次のようなものです:

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

どうすればできますか?

35
Sergey

CURLOPT_INTERFACEオプションを設定してみてください:

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

CURLOPT_INTERFACE:使用する発信ネットワークインターフェイスの名前。これは、インターフェース名、IPアドレス、またはホスト名にすることができます。

From: php Manual:curl_setopt


EDIT:修正例 @ Michael Hartが指摘 が他の回答で指摘されています。

55
Daniel Vassallo

私はまだ返事ができないので、ダニエル・ヴァッサロの答えに加えたかっただけです。彼は正しいですが、彼の例は正しくありません。

CURLOPT_INTERFACEは定数であり、引用符で囲むことはできません。これは、それが機能しないことを確認するためだけにコピーして貼り付けることができる人に少し混乱を引き起こす可能性があります。適切なコードは次のとおりです。

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

また、Linuxシステムの場合(Windowsだと思いますが、まったく同じではありません)、IPアドレスを使用する必要がないことを指摘したいと思います。 ethNインターフェースがわかっている場合は、ネットワークの構成方法に応じて、「eth0」、「eth1」、または「eth0:0」を使用できます。これは、コードが1台のマシンに固有ではなく、より広範な構成(たとえば、クラスター)に適合する可能性があるため、より望ましい場合があります。

26
Michael