如何以编程方式测试 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 服务是不是已启动并正在运行?