【问题标题】:PHP cURL - Send Data From www to Local IPPHP cURL - 将数据从 www 发送到本地 IP
【发布时间】:2023-03-19 01:20:01
【问题描述】:

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

【问题讨论】:

  • 192.168.2.10 的代码是否也在直播服务器上运行,您是否更新了 IP 地址?
  • @NigelRen 位于 192.168.2.10:12800 的应用程序确实在本地服务器上运行,并且正在等待发送到 IP 地址的传入数据。
  • 您不太可能从远程服务器访问此 IP 地址,您使用的范围仅在您的本地网络上可用。不确定stackoverflow.com/questions/52137672/… 是否给出了答案。

标签: php curl localhost local


【解决方案1】:

为了让远程服务器与您的本地基础架构进行通信,您需要通过外部 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。

【讨论】:

  • 感谢您的解释。此解决方案适用于任何网站访问者,因此如果每个访问我的网站的人都必须完成这些步骤,它可能不会奏效。用 JavaScript 处理这个工作,因为那是客户端而不是服务器端?
  • 根据您的说法,每个客户都需要将 PHP 文件托管在他/她的机器上并启用网络服务器,这很可能不是您想要实现的。您可以尝试通过 JavaScript 调用本地 IP,但仍然:您的所有客户端都会有一个本地网络服务器来处理启用的请求吗?也许多描述一下您正在尝试构建的服务,所以我会告诉您更多有关您需要的基础架构的信息。
  • 是的,每个访问者都会运行一个网络服务器来接收传入的数据。该服务旨在作为 CDN 将更新文件下载到访问者的服务器,始终在本地 IP 上运行。我不确定这是否足以让您提供建议?假设 JavaScript 可以工作,但这需要我公开一个私有 API,所以下一步是在我获得 JavaScript 方法的 PoC 工作后研究 API 安全性。
  • 好吧,那么是的:您可以尝试使用 JSONP 加载内容,或者在所有本地服务器的响应中添加 Access-Control-Allow-Origin 标头。但是仍然:客户端需要 a) 打开网络服务器,同时 b) 进入将查询调用到本地服务器的网站。
  • 这不是问题,因为访问者知道该服务,并且需要运行网络服务器才能使用该服务。我将尝试使用 JavaScript 的方式来做这件事。我认为使用 PHP 发送它对我来说会容易得多,因为我不必搞乱保护 API,哦,好吧。今天学到了一些新东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 2014-04-14
相关资源
最近更新 更多