如何以编程方式测试 ngrok 是不是已经在运行

Posted

技术标签:

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

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

检查 ngrok 是否已经在运行:

点击http://127.0.0.1:4040/status

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

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

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

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

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

是否有一些programmatic way 来确定 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 实现

以上是关于如何以编程方式测试 ngrok 是不是已经在运行的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式检查应用程序是不是在 TestFlight beta 模式下运行? [复制]

C#:如何以编程方式检查 Web 服务是不是已启动并正在运行?

有没有办法以编程方式为 iOS 上的 3rd 方应用程序获取 UI 层次结构?

如何以编程方式检查 Photoshop 画笔是不是存在

如何以编程方式获取当前正在运行的 XC 测试计划的配置?

如何以编程方式更改发布类型?