是否可以通过编程方式确定连接到远程服务器时cURL使用的IP地址?我有一个共享服务器,我正在使用cURL,我需要发送IP地址作为请求的一部分。
我正在与之交谈的服务器需要一个结合了连接IP地址和旋转密码的身份验证字符串(例如我的$ code = SHA1($ _ SERVER ['SERVER_ADDR']。$ passcode)最终与SHA1进行比较($ _SERVER ['REMOTE_ADDR']。$ passcode))。当来自cURL的传出连接使用与$ _SERVER ['SERVER_ADDR']中存储的相同的IP时,这很好用,但是cURL使用的IP地址现在不同并且会定期轮换。
答案 0 :(得分:3)
您可以在致电之前获取公共IP:
$ch = curl_init('http://whatismyip.org/');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
$myIp = curl_exec($ch);
然而:
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使用那个,而不是负载均衡器可能想要使用的那个