首页 > 解决方案 > PHP cURL - 将数据从 www 发送到本地 IP

问题描述

我一直在尝试使用 cURL 将数据发送到本地 IP。此 IP 正在等待接收传入数据。

为此,我使用了以下代码:

if(isset($_GET['post'])) {
    $data = array(
        'type' => 'direct',
        'packages' => []
    );

    $curl = curl_init('http://192.168.2.10:12800/api/install');
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($curl, CURLOPT_FAILONERROR, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

    if (curl_errno($curl)) {
        $error_msg = curl_error($curl);
    }

    echo curl_exec($curl);

    if (isset($error_msg)) {
        echo $error_msg;
    } else {
        echo 'OK!';
    }
}

在本地主机上它可以工作,但在实时网站上却不行。

我在想非本地主机可能无法与本地主机环境进行通信,但我不确定。

是否可以让我的脚本将数据发送到本地 IP?

编辑:事后诸葛亮,我是否必须切换到 JavaScript 才能使其正常工作?

标签: phpcurllocalhostlocal

解决方案


为了让远程服务器与您的本地基础设施进行通信,您需要通过外部 IP 公开它。所以你需要:

1) 在您的路由器上设置一个端口的路由(例如通过端口 12800 到本地网络中的特定 IP - 例如,如果您的外部 IP 是 83.123.123.123,那么路由器将通过发送到 83.123.123.123 的任何流量: 12800 到 192.168.2.10:12800。通常这种设置在路由器的设置中称为“路由”或“端口转发”或“虚拟服务器”。

2)学习你的外部IP。您可以通过以下方式进行操作:https ://www.myexternalip.com/

3) 如果您的 IP 是动态的,它可能会不时更改。为避免出现问题,您可以在流行的提供商之一中设置动态 DNS 条目 - 例如 no-ip.com。


推荐阅读