使用PHP的cURL,可以确定cURL将使用的IP地址?

时间:2011-09-15 14:54:06

标签: php curl

是否可以通过编程方式确定连接到远程服务器时cURL使用的IP地址?我有一个共享服务器,我正在使用cURL,我需要发送IP地址作为请求的一部分。

我正在与之交谈的服务器需要一个结合了连接IP地址和旋转密码的身份验证字符串(例如我的$ code = SHA1($ _ SERVER ['SERVER_ADDR']。$ passcode)最终与SHA1进行比较($ _SERVER ['REMOTE_ADDR']。$ passcode))。当来自cURL的传出连接使用与$ _SERVER ['SERVER_ADDR']中存储的相同的IP时,这很好用,但是cURL使用的IP地址现在不同并且会定期轮换。

4 个答案:

答案 0 :(得分:3)

您可以在致电之前获取公共IP:

$ch = curl_init('http://whatismyip.org/');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
$myIp = curl_exec($ch);

然而:

  • 如果您的公共IP有时会在cURL会话之间发生变化,那么在上述会话与您实际需要此数据的下一个会话之间没有任何改变。
  • 它依赖于实际运行的whatismyip.org(或类似服务)。

答案 1 :(得分:2)

您可以强制curl使用的IP,而不是检测它。

使用curl_setopt()CURLOPT_INTERFACE选项 - 将其设置为您要使用的IP。

如果您正在使用具有IP池的服务器(例如云服务器),那么出于安全原因,建议选择要使用的接口,如果在另一侧检测该接口很重要。

就个人而言,当IP受到限制时,我不得不通过cURL使用该功能进行卡支付数据传输。

答案 2 :(得分:1)

有一个名为whatismyip.com的网站。他们有一个公开可用的API,你可以使用,只要你没有超过他们的限制(这是每小时五个请求??)。是不是会受伤,呃?

答案 3 :(得分:1)

假设curl始终从同一台服务器运行,即使它有多个网卡,如果告诉curl要使用哪个IP也无关紧要。

我会使用DaveRandom获取您当前正在使用的IP的技巧,然后使用

将其设置为下一次调用
curl_setopt($ch, CURLOPT_INTERFACE, "XXX.XXX.XXX.XXX");

假设两个调用足够接近,IP仍然很有可能绑定到接口,并且通过设置它你会告诉curl使用那个,而不是负载均衡器可能想要使用的那个