1

我将 PHP 和 cURL 与 REST api 一起使用,即使我可以 cURL 初始 Nest Developer api 端点,一旦它重定向到 Firebase 的 url,它就会通过端口 9553,我的网络主机已阻止(也没有机会打开) . 连接超时并引发“无法连接到主机”错误。

我的代码运行良好,我可以在本地服务器上毫无问题地运行它。

我是使用 cURL 的新手,我有什么选择?在我看来,问题在于 Firebase 坚持使用的端口。我可以卷曲多个不同的位置,超过 :80 和 :443 没有问题,只是不是 Firebase 的 url。我是否需要通过代理才能访问数据?

或者,这是否可以通过使用 Firebase 的 PHP 库来解决?如果我不需要的话,我对使用它并不是很感兴趣,cURL 会很好地完成这项工作,而且我不知道它是如何工作的。

4

2 回答 2

1

REST 无法绕过重定向,它们指向 Nest 云中的特定端口和主机。

Firebase 的 Web Sockets 客户端有什么问题?它比 REST 性能更高。

于 2014-07-27T04:51:13.850 回答
0

joshguerette,您的防火墙是否阻止了该端口?

您可以使用以下命令从您的 c# 代码中打开端口:

using Microsoft.TeamFoundation.Common;
private void AddPortToFirewall(int portNumber, string name) 
{
    INetFwMgr icfMgr = null;
    try
    {
        Type TicfMgr = Type.GetTypeFromProgID("HNetCfg.FwMgr");
        icfMgr = (INetFwMgr)Activator.CreateInstance(TicfMgr);
    }
    catch (Exception ex)
    {
        Debug.WriteLine("Failed in AddPortToFirewall.Activator " + portNumber.ToString() + " " + name + " " + ex.ToString());
        return;
    }

    try
    {
        INetFwProfile profile;
        INetFwOpenPort portClass;
        Type TportClass = Type.GetTypeFromProgID("HNetCfg.FWOpenPort");
        portClass = (INetFwOpenPort)Activator.CreateInstance(TportClass);

        // Get the current profile
        profile = icfMgr.LocalPolicy.CurrentProfile;

        // Set firewall enabled
        if (!profile.FirewallEnabled)
            profile.FirewallEnabled = true;

        // Set the port properties
        portClass.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_ALL;
        portClass.Enabled = true;
        portClass.Name = name;
        portClass.Port = portNumber;
        portClass.Protocol = NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;

        // Add the port to the ICF Permissions List
        bool portExisted = false;
        foreach (INetFwOpenPort p in profile.GloballyOpenPorts)
        {
            if (p.Port == portNumber && p.Name == name)
            {
                portExisted = true;
                Debug.WriteLine("Windows Firewall inbound list:" + p.Port + " " + p.Name);
                break;
            }
        }

        if (!portExisted)
        {
            profile.GloballyOpenPorts.Add(portClass);
            Debug.WriteLine("ServicePort " + portNumber.ToString() + " " + name + " was added into Windows Firewall inbound list.");
        }
        else
        {
            Debug.WriteLine("ServicePort " + portNumber.ToString() + " " + name + " has already in Windows Firewall inbound list.");
        }

    }
    catch (Exception ex)
    {
        Debug.WriteLine("Failed in AddPortToFirewall " + portNumber.ToString() + " " + name + " " + ex.ToString());
    }
}
于 2014-07-28T19:46:25.770 回答