【问题标题】:How to programmatically test if ngrok is already running如何以编程方式测试 ngrok 是否已经在运行
【发布时间】:2018-01-09 04:44:05
【问题描述】:

我们在 localhost 端口上运行了 ngrok,例如 http://localhost:4000。我们可以使用以下步骤手动测试 ngrok 是否已经在运行:

检查 ngrok 是否已经在运行:

如果连接成功,将显示以下视觉效果:

如果没有显示上述视觉效果,则 ngrok 根本没有运行。

  • 隧道部分下,将显示以下视觉效果:

如果未显示上述视觉效果,则 ngrok 未在 PORT 4000 上运行。

要在 http://localhost:4000 上启动 ngrok,我们需要运行 ngrok http 4000。运行此命令后,将显示上述视觉效果。

是否有一些programmatic way 来确定 ngrok 是否已经在端口上运行?

【问题讨论】:

    标签: javascript node.js ubuntu ngrok


    【解决方案1】:

    对于其他被这个问题绊倒的人, 使用 curl 或您选择的编程语言中的任何请求库向 http://localhost:4040/api/tunnels 发出请求。它返回 ngrok 隧道及其 url 的 JSON 格式响应,您可以获得这些响应。如果它没有返回任何内容,则表示 ngrok 没有运行

    例如python:

    import requests
    import json
    from bs4 import BeautifulSoup
    req = requests.get('http://127.0.0.1:4040/api/tunnels')
    soup = BeautifulSoup(req.text, 'lxml')
    tunnelsjson = json.loads(soup.find('p').text)
    url = tunnelsjson['tunnels'][0]['public_url']
    print(url)
    

    【讨论】:

    • 如果你运行多个 ngrok 服务器,你将需要使用:4041、:4042 等。
    【解决方案2】:

    运行此命令以查看使用端口:

    sudo lsof -PiTCP -sTCP:LISTEN
    

    【讨论】:

    • 欣赏这个!但是,有没有办法使用某种代码来检查这个?
    【解决方案3】:

    可以通过python查看:

    import socket;
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex(('127.0.0.1',4000))
    print(result)
    if result == 0:
        print "Port is not open"
    else:
        print "Port is open"
    

    附:如果端口正在使用,则结果为 0,否则为 61。

    【讨论】:

      【解决方案4】:

      运行 netstat -tulnap | grep ngrok

      netstat -tulnap 显示机器上正在运行的进程 用于 ngrok 进程的 grep ngrok 过滤器。

      【讨论】:

      • 我想看看这个的程序化 javascript 实现
      猜你喜欢
      • 2012-12-31
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      相关资源
      最近更新 更多