为 curl 请求选择传出 IP

Posted

技术标签:

【中文标题】为 curl 请求选择传出 IP【英文标题】:select outgoing ip for curl request 【发布时间】:2011-01-26 09:47:08 【问题描述】:

我的服务器有两个不同的 IP。我需要从第一个 IP 甚至从第二个 IP 发送奇怪的 curl 请求。如何选择传出 IP 地址?

我的 php 脚本是这样的:

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

我该怎么做?

【问题讨论】:

【参考方案1】:

您可能想尝试设置CURLOPT_INTERFACE 选项:

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

CURLOPT_INTERFACE:要使用的传出网络接口的名称。这可以是接口名称、IP 地址或主机名。

发件人:php Manual: curl_setopt


编辑:修复示例,正如 @Michael Hart pointed out 在另一个答案中指出的那样。

【讨论】:

【参考方案2】:

由于我还不能回复,只是想补充一下 Daniel Vassallo 的答案。虽然他是正确的,但他的榜样却不是。

CURLOPT_INTERFACE 是一个常量,不能放在引号内。这可能会导致一些人感到困惑,他们可能会复制和粘贴只是发现它不起作用。正确的代码是:

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

另外,对于 Linux 系统(我确定是 Windows,但不会完全相同),我想指出您不必使用 IP 地址。如果您知道 ethN 接口,则可以简单地使用“eth0”、“eth1”或“eth0:0”,具体取决于您的网络配置方式。这可能更可取,因为代码不会特定于一台机器,并且可能适合更广泛的配置(例如,集群)。

【讨论】:

以上是关于为 curl 请求选择传出 IP的主要内容,如果未能解决你的问题,请参考以下文章

在发送传出请求之前将新的 SoapClient 绑定到特定的 IP 地址

如何将多个传出IP地址分配给AWS上的单个实例?

postman导入cURL命令请求

怎么判断curl调用接口返回成功:响应码

curl请求指定host ip(指定域名解析的内网某ip)

通过具有相同 IP 的 TOR 发出两个线性 cURL 请求