当我使用./ngrok tcp 22
启动ngrok客户端时,它会在前台运行,我可以看到随机生成的转发URL,例如tcp://0.tcp.ngrok.io:12345 -> localhost:22
。
如果我使用./ngrok tcp &
在其中运行背景,我找不到任何方式来查看转发网址。如何在后台运行ngrok并仍然可以看到URL?
答案 0 :(得分:37)
有两种方法。
你可以:
A)访问localhost:4040/status
以查看大量信息
2)使用curl点击API:localhost:4040/api/tunnels
答案 1 :(得分:10)
这个小Python(2.7)脚本将调用ngrok API并打印当前URL:
import json
import os
os.system("curl http://localhost:4040/api/tunnels > tunnels.json")
with open('tunnels.json') as data_file:
datajson = json.load(data_file)
msg = "ngrok URL's: \n'
for i in datajson['tunnels']:
msg = msg + i['public_url'] +'\n'
print (msg)
答案 2 :(得分:2)
如果它帮助我编写快速脚本的任何人在Node中提取生成的随机URL:
假设您只对安全网址感兴趣。
const fetch = require('node-fetch')
fetch('http://localhost:4040/api/tunnels')
.then(res => res.json())
.then(json => json.tunnels.find(tunnel => tunnel.proto === 'https'))
.then(secureTunnel => console.log(secureTunnel.public_url))
.catch(err => {
if (err.code === 'ECONNREFUSED') {
return console.error("Looks like you're not running ngrok.")
}
console.error(err)
})
如果您想要所有隧道:
const fetch = require('node-fetch')
fetch('http://localhost:4040/api/tunnels')
.then(res => res.json())
.then(json => json.tunnels.map(tunnel => tunnel.public_url))
.then(publicUrls => publicUrls.forEach(url => console.log(url)))
.catch(err => {
if (err.code === 'ECONNREFUSED') {
return console.error(
"Looks like you're not running ngrok."
)
}
console.error(err)
})
答案 3 :(得分:2)
import json
import requests
def get_ngrok_url():
url = "http://localhost:4040/api/tunnels/"
res = requests.get(url)
res_unicode = res.content.decode("utf-8")
res_json = json.loads(res_unicode)
for i in res_json["tunnels"]:
if i['name'] == 'command_line':
return i['public_url']
break
这是对JUN_NETWORKS python 3代码的编辑。它仅输出HTTPS URL。我发现Ngrok会随机更改顺序,即先显示URL有时输出HTTP。附加循环将始终寻找名为“ command_line”的“隧道”,即HTTPS URL。
答案 4 :(得分:2)
如果您喜欢PowerShell,它就在变量中。
$ngrokOutput = ConvertFrom-Json (Invoke-WebRequest -Uri http://localhost:4040/api/tunnels).Content
$httpsUrl = $ngrokOutput.tunnels.public_url[0]
$httpUrl = $ngrokOutput.tunnels.public_url[1]
答案 5 :(得分:0)
运行./ngrok http&这将ngrok隧道作为后台进程运行。 Ngrok通常打开一个显示已分配URL的窗口,但由于我们使用nohup命令,因此不可见。
因此,运行curl http://127.0.0.1:4040/api/tunnels也会看到ngrok分配的URL
答案 6 :(得分:0)
在Python3中
import json
import requests
def get_ngrok_url():
url = "http://localhost:4040/api/tunnels"
res = requests.get(url)
res_unicode = res.content.decode("utf-8")
res_json = json.loads(res_unicode)
return res_json["tunnels"][0]["public_url"]
此返回的json具有2个url,分别表示 http 和 https 。
如果只需要 https网址,则res_json["tunnels"][index num]["proto"]
答案 7 :(得分:0)
在Ruby中
require 'httparty'
# get ngrok public url
begin
response = HTTParty.get 'http://localhost:4040/api/tunnels'
json = JSON.parse response.body
new_sms_url = json['tunnels'].first['public_url']
rescue Errno::ECONNREFUSED
print 'no ngrok instance found. shutting down'
exit
end
答案 8 :(得分:0)
有一种更好的方法,只需登录ngrok.com上的帐户即可。 您的网址将在您的信息中心中。
答案 9 :(得分:0)
如果您想获得第一个隧道,那么jq
将是您的朋友:
curl -s localhost:4040/api/tunnels | jq -r .tunnels[0].public_url
运行多个ngrok实例时,请使用隧道名称/api/tunnels/:name
。
答案 10 :(得分:0)
奖励:它在 Windows、Mac 和 Linux 中将 url 复制到剪贴板1
const http = require("http");
const { execSync } = require("child_process");
const callback = (res) => {
let data = "";
res.on("data", (chunk) => (data += chunk));
res.on("end", () => {
const resJSON = JSON.parse(data);
const tunnels = resJSON.tunnels;
const { public_url: url } = tunnels.find(({ proto }) => proto === "https");
console.log(url);
// Copy to clipboard
switch (process.platform) {
case "win32":
execSync(`echo ${url} | clip`);
break;
case "darwin":
execSync(`echo ${url} | pbcopy`);
break;
case "linux":
// NOTE: this requires xclip to be installed
execSync(`echo ${url} | xclip -selection clipboard`);
break;
default:
break;
}
});
};
http.get("http://localhost:4040/api/tunnels", callback);
[1] 您需要先安装 xclip
:
sudo apt-get install xclip
答案 11 :(得分:0)
如果你使用的是 nodejs,我这样做了
const getURL = async () => {
// inspect if the callback is working at: http://127.0.0.1:4040/inspect/http
const ngrok = await import('ngrok')
const api = ngrok.getApi();
const { tunnels } = JSON.parse(await api?.get('api/tunnels') ?? '{}')
// if we already have a tunnel open, disconnect. We're only allowed to have 4
if (tunnels?.length > 0) await ngrok.disconnect()
return await ngrok.connect(3000)
}
答案 12 :(得分:0)
我检查随机生成的 URL 的最简单方法是转到 ngrok official site > dashboard > endpoints > status 并检查我的端点的 URL 和状态
答案 13 :(得分:-1)
可能我回答的时间太晚了,但如果对访问这个问题的人有帮助,我会很高兴。
***以上答案是查看/检查重定向网址的解决方案。但是要在后台运行ngrok,你可以尝试在linux中使用screen。如果你需要帮助,请快速reference
步骤: 1.只需在屏幕中运行ngrok然后分离。 2.使用上面Gerard给出的python脚本来查看URL。
我遵循相同的流程并且有效!