在后台 运行 时查看随机 ngrok URL
View random ngrok URL when run in background
当我使用 ./ngrok tcp 22
启动 ngrok 客户端时,它 运行 在前台,我可以看到随机生成的转发 URL,例如 tcp://0.tcp.ngrok.io:12345 -> localhost:22
。
如果我运行在它的背景里加上./ngrok tcp &
,我找不到任何方法可以看到转发URL。我怎样才能在后台 运行 ngrok 并仍然看到 URL?
有几种方法。
您可以:
1) 在浏览器中访问 localhost:4040/status
以查看大量信息,或者
2) 使用 curl 命中 API: localhost:4040/api/tunnels
这个小 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)
可能是我回答的有点晚了,但如果对访问该问题的人有所帮助,我会很高兴。
***以上答案是 see/check 重定向 URL 的解决方案。但是,对于后台的 运行 ngrok,您可以尝试在 linux 中使用屏幕。如果您在这里需要帮助,请尽快 reference
步骤:
1. 只需 运行 屏幕中的 ngrok,然后分离。
2.使用上面Gerard给出的python脚本查看URL.
我遵循了相同的过程并且有效!
如果它对任何人有帮助,我写了一个快速脚本来提取节点中生成的随机 url:
它假设您只对安全 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)
})
运行 ./ngrok http & 这 运行s ngrok 隧道作为后台进程。 Ngrok 通常会打开一个 window 显示已分配的 URL 但由于我们使用的是 nohup 命令,因此这是不可见的。
因此,然后 运行 curl http://127.0.0.1:4040/api/tunnels
也请参阅 ngrok
分配的 URL
在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 http 和 https 有 2 url。
如果你只想要 https url,你 res_json["tunnels"][index num]["proto"]
在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
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' 的 'tunnel',即 HTTPS URL.
有一种更好的方法,只需在 ngrok.com 上登录您的帐户即可。
您的 URL 将在您的仪表板中。
如果你想获得第一个隧道那么jq
将是你的朋友:
curl -s localhost:4040/api/tunnels | jq -r .tunnels[0].public_url
当 运行 多个 ngrok 实例时,则使用隧道名称 /api/tunnels/:name
。
如果您喜欢 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]
一个Node.js解决方案。
Bonus:它将url复制到Windows、Mac和Linux[=20=中的剪贴板]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
如果您使用的是 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)
}
我检查随机生成的 URL 的最简单方法是转到 ngrok official site > dashboard > endpoints > status 并检查 URL 和我的端点
的状态
当我使用 ./ngrok tcp 22
启动 ngrok 客户端时,它 运行 在前台,我可以看到随机生成的转发 URL,例如 tcp://0.tcp.ngrok.io:12345 -> localhost:22
。
如果我运行在它的背景里加上./ngrok tcp &
,我找不到任何方法可以看到转发URL。我怎样才能在后台 运行 ngrok 并仍然看到 URL?
有几种方法。
您可以:
1) 在浏览器中访问 localhost:4040/status
以查看大量信息,或者
2) 使用 curl 命中 API: localhost:4040/api/tunnels
这个小 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)
可能是我回答的有点晚了,但如果对访问该问题的人有所帮助,我会很高兴。
***以上答案是 see/check 重定向 URL 的解决方案。但是,对于后台的 运行 ngrok,您可以尝试在 linux 中使用屏幕。如果您在这里需要帮助,请尽快 reference
步骤: 1. 只需 运行 屏幕中的 ngrok,然后分离。 2.使用上面Gerard给出的python脚本查看URL.
我遵循了相同的过程并且有效!
如果它对任何人有帮助,我写了一个快速脚本来提取节点中生成的随机 url:
它假设您只对安全 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)
})
运行 ./ngrok http & 这 运行s ngrok 隧道作为后台进程。 Ngrok 通常会打开一个 window 显示已分配的 URL 但由于我们使用的是 nohup 命令,因此这是不可见的。
因此,然后 运行 curl http://127.0.0.1:4040/api/tunnels
也请参阅 ngrok
在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 http 和 https 有 2 url。
如果你只想要 https url,你 res_json["tunnels"][index num]["proto"]
在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
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' 的 'tunnel',即 HTTPS URL.
有一种更好的方法,只需在 ngrok.com 上登录您的帐户即可。 您的 URL 将在您的仪表板中。
如果你想获得第一个隧道那么jq
将是你的朋友:
curl -s localhost:4040/api/tunnels | jq -r .tunnels[0].public_url
当 运行 多个 ngrok 实例时,则使用隧道名称 /api/tunnels/:name
。
如果您喜欢 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]
一个Node.js解决方案。
Bonus:它将url复制到Windows、Mac和Linux[=20=中的剪贴板]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
如果您使用的是 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)
}
我检查随机生成的 URL 的最简单方法是转到 ngrok official site > dashboard > endpoints > status 并检查 URL 和我的端点
的状态