使用CURL访问我的家庭网络

Eth*_*han 2 php scripting curl

这个问题有点覆盖ServerFault.com和这里,但这似乎比服务器更多的编程.我设置我的家用电脑来运行Apache服务器.它回答端口5900,它已从我的无线路由器转发端口.然后,我设置了一个动态DNS服务器,以不断更新我的家庭网络的IP地址.我知道该部分有效,因为我在不同的无线网络上使用了不同的计算机,并且能够使用MYURL.com:5900访问我的服务器的索引页面.

我的目标是现在向我的家庭服务器发送消息.我在我的家庭服务器上编写了一个脚本,如果我发送一条POST消息,它会将该消息保存到文件中.换句话说,一系列事件应该是这样的:

  1. 我登录到我的网页,在输入中写入文本,然后点击发送按钮
  2. 消息将传递到我的网站的服务器.
  3. 我的服务器运行一个脚本,该脚本使用CURL将消息作为POST发送到我的主服务器的DDNS
  4. 家中的服务器接收帖子,并运行将脚本写入文件的脚本.

我知道怎么做1,2和4.我一直试图让3工作而不能.我甚至无法让CURL读取我的家庭服务器的index.html.这是我用过CURL(使用PHP)的代码:

    $string = 'http://MYURL.com';

    echo "sending to " . $string . '<br/>';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PORT, 5900);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    $response = curl_exec($ch);

    if(curl_error($ch))
    {
        echo curl_error($ch);
    }
    echo $response;

    curl_close($ch);
Run Code Online (Sandbox Code Playgroud)

我用google.com和默认端口测试了这个,它运行正常.它回应了谷歌给我的HTML.但是,当我在家庭服务器的DNS上运行它时,它总是超时.当我没有添加时间时,它说它无法连接.这是使用完全相同的URL,当放入浏览器时,正确地发送给我我的家庭服务器的index.html.

有谁知道出了什么问题?此外,如果有更好的方法,这是什么?

我知道这是一个很长的问题,所以非常感谢你.

阮经天

sle*_*man 5

你从哪里测试这个?如今,大多数网络严重受到防火墙的限制,并且不允许与奇怪端口的外向连接.你的端口5900肯定有点奇怪.

您使用无线(我假设3G?)网络的测试工作的原因是因为PC /笔记本电脑恰好直接连接到互联网,因此不会被防火墙阻止.

测试防火墙理论的最简单方法是在端口80上的服务器上设置测试页,并尝试使用CURL访问它.如果这样可行,那么您就知道问题是路由器和代理链上的某个人阻塞了您的端口5900.


稍微说明为什么端口80不被认为是"奇怪的":

端口80是IANA分配的常规用于HTTP(Web服务器)端口.因此,考虑到人们连接到互联网的主要原因是访问万维网(在HTTP上运行并因此需要打开端口80),因此通常不会阻止它.阻止端口80使互联网无效(好吧,不完全,你还有电子邮件).如果系统管理员曾阻止端口80,他也可以断开互联网连接.这就是默认端口80未被阻止的原因.

现在,这对你来说意味着什么,家庭服务器管理员.当然,您的IP地址只有一个端口80.这意味着只有一个端口转发规则连接到端口80.这意味着本地网络上只能有一台计算机向外界提供网页*.如果你的小弟弟或妹妹想要运行另一个网络服务器,那么他/她将不得不使用另一个端口.

这就是为什么Web服务器被设计为服务多个网页(它们检测URL以便单个端口80可以服务于不同站点)的原因.它允许单个IP地址从一台机器为不同的网站提供服务.谷歌:http virtual host了解更多信息.

*注意:不完全正确,您可以使用负载平衡或重新路由代理将HTTP请求重定向到网络上的其他计算机.但原则仍然是正确的.只有一台机器的端口80可以直接暴露在互联网上.其他人只是代理.