【发布时间】:2017-11-07 23:59:56
【问题描述】:
我们的合作伙伴已将我们的服务器 IP 列入白名单,因此我们可以向他们发送带有新客户端数据的 cURL 请求,但他们的 CRM 返回 Error: IP address of a connected platform is not allowed 可能是因为标头包含 CloudFlare IP,而不是我们要求列入白名单的服务器的真实 IP。
有没有办法通过 cURL 请求显示我们的真实服务器 IP?
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://clients.domain.com/api');
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$res = curl_exec($curl);
return $res;
试过了,没有成功:
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_INTERFACE, '1.1.1.1');
还有:
curl_setopt($curl, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: 1.1.1.1, HTTP_X_FORWARDED_FOR: 1.1.1.1"));
编辑:他们的日志显示 IPv6 IP 而不是 IPv4 服务器 IP,它看起来像这样:2a02:7aa0:1201::xxxx:xxxx经过一些调查,似乎这个 IPv6 IP 是由托管公司托管的,并且在将其列入白名单后,一切都开始工作了。
关于为什么 cURL 发送一些奇怪的 IPv6 而不是真正的服务器 IPv4 有什么想法吗?
【问题讨论】:
-
CloudFlare 是一个入站代理,因此传出的 cURL 请求不会通过 CloudFlare,而是从您服务器的公共 IP 出现。尝试 curl 显示您的 IP 地址的网站,看看是否与您提供的匹配。
-
是否有任何公共网站可以帮助我,或者我需要自己制作一个脚本?
-
使用了ifconfig.co,它显示了服务器IP。很奇怪,怎么可能在localhost上运行,在服务器上不行(两个IP都被列入白名单)
-
如果您和远程服务器拥有 ipv6,现代 Linux 和 windows 将首先使用 ipv6。您可以将 curl 选项 CURLOPT_IPRESOLVE 设置为 CURL_IPRESOLVE_V4 以强制使用 IPv4,这应该可以解决您的问题。您可能希望他们也添加 v6 地址,以防万一由于问题而退回到该地址。
-
太棒了!非常感谢!
标签: curl ip cloudflare