PHP cURL-将数据从www发送到本地IP

PHP cURL-将数据从www发送到本地IP,php,curl,localhost,local,Php,Curl,Localhost,Local,我一直在尝试使用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,

我一直在尝试使用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才能工作?

为了让远程服务器与本地基础设施通信,您需要通过外部IP公开它。因此,您需要:

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

2) 学习你的外部ip。您可以通过以下方式进行操作,例如:


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

192.168.2.10的代码是否也在实时服务器上运行,您是否更新了ip地址?@NigelRen 192.168.2.10:12800的应用程序确实在本地服务器上运行,正在等待发送到IP地址的传入数据。您不太可能从远程服务器访问此IP地址,您使用的范围仅在本地网络上可用。不确定是否给出了答案。谢谢你的解释。此解决方案适用于任何网站访问者,因此,如果每个访问我的网站的人都必须完成这些步骤,则可能无法解决此问题。用JavaScript处理这个问题行得通吗,因为这是客户端而不是服务器端?根据您所说的,每个客户端都需要在其机器上托管PHP文件并启用Web服务器,而这很可能不是您想要实现的。您可以尝试通过JavaScript调用本地IP,但是:您的所有客户机是否都有一个本地Web服务器来处理启用的请求?也许再描述一下您正在尝试构建的服务,这样我将告诉您更多关于您需要的基础设施的信息。是的,每个访问者都将运行一个Web服务器来接收传入的数据。此服务将用作CDN,用于将更新文件下载到访客服务器,始终在本地IP上运行。我不确定这些信息是否足够你提供建议?假设,JavaScript可以工作,但这需要我公开一个私有API,所以下一步是在我获得JavaScript方法的PoC工作后,我将研究API安全性,然后是:您可以尝试使用JSONP加载内容,或者在所有本地服务器的响应中添加
accesscontrolalloworigin
头。但是,客户端仍然需要a)打开Web服务器,而b)进入向其本地服务器调用查询的网站。这不会是一个问题,因为访问者知道该服务,并且需要运行Web服务器才能使用该服务。我将尝试使用JavaScript的方式来实现它。我认为使用PHP发送它对我来说会容易得多,因为我不必担心API的安全问题。今天学到了一些新东西。