【问题标题】:PHP cURL connect using IP address instead domain namePHP cURL 使用 IP 地址而不是域名连接
【发布时间】:2015-03-23 11:02:33
【问题描述】:

我在同一个数据中心运行多台启用了内部网络的服务器。出于速度和成本的考虑(内部流量不计费),我希望能够在其内部 IP 上的各个服务器之间进行 cURL。

我刚刚发现,如果我尝试类似

curl_init('10.x.x.x);

甚至

curl_init():
curl_setopt(CURLOPT_URL,'https://10.x.x.x/scripttorun.php');

不起作用。当我只有非常少量的数据要发送时,我可以将其作为查询字符串附加并执行 file_get_contents。但是,当数据量太大而无法作为 GET 请求发送时,如果我不能使用 cURL,事情就会变得更加混乱。

搜索点建议我可以通过编辑 /etc/hosts 表来说服 cURL 使用 IP。问题是内部网络上的各种服务器可能会以不可预测的时间间隔上下线,所以我最终不得不定期轮询以查看哪些服务器在线,编写脚本来更新 /etc/hosts...很乱。

也许有一个简单的解决方案可以说服 cURL 使用 IP。毕竟,file_get/put_contents 毫不犹豫地这样做了。我非常感谢任何能够解决 cURL 的人

【问题讨论】:

  • 除了 nilesh 回答中的虚拟主机名之外,您还必须检查目标上的防火墙和侦听接口。

标签: php curl


【解决方案1】:

如果您必须连接到服务器并询问特定的服务器名称,您可以使用 curl setopt 参数来完成。如果您想从特定 IP 从 www.mytopsite.com 获取文件 /index.php(不添加任何 /etc/hosts 映射),您可以这样做:

$headers = array("Host: www.myfaketopsite.com");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, "http://10.1.2.3/index.php");

【讨论】:

    猜你喜欢
    • 2017-01-03
    • 2014-08-13
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多