Lorsque je démarre un client ngrok avec ./ngrok tcp 22
, il s’exécute au premier plan et je peux voir l’URL de transfert générée de manière aléatoire, telle que tcp://0.tcp.ngrok.io:12345 -> localhost:22
.
Si j'exécute l'arrière-plan avec ./ngrok tcp &
, je ne peux trouver aucun moyen de voir l'URL de transfert. Comment puis-je exécuter ngrok en arrière-plan et toujours voir l'URL?
Il y a deux façons.
Tu peux soit:
A) Visitez localhost:4040/status
pour voir un tas d'informations
2) Utilisez curl pour frapper l'API: localhost:4040/api/tunnels
Ce petit script Python (2.7) appelle l’API ngrok et affiche les URL actuelles:
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)
Si cela aide quelqu'un, j'ai écrit un script rapide pour extraire l'URL aléatoire générée dans Node:
Cela suppose que vous n'êtes intéressé que par l'URL sécurisée.
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)
})
Si vous vouliez tous les tunnels:
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)
})
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
Ceci est une édition du code JUN_NETWORKS python 3. Il génère uniquement l'URL HTTPS. Je trouve que Ngrok va changer au hasard l'ordre dans lequel l'URL est affichée en premier, parfois en sortie HTTP. La boucle supplémentaire recherchera systématiquement le "tunnel" nommé "ligne_commande", qui correspond à l'URL HTTPS.
Run ./ngrok http & Ceci exécute le tunnel ngrok en tant que processus en arrière-plan. Ngrok ouvre généralement une fenêtre indiquant l'URL attribuée, mais comme nous utilisons la commande Nohup, celle-ci n'est pas visible.
Ainsi, lancez curl http://127.0.0.1:4040/api/tunnels aussi voir l'URL assignée par ngrok
En rubis
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
Il existe un meilleur moyen de le faire, il suffit de vous connecter à votre compte sur ngrok.com . Votre URL sera dans votre tableau de bord.
En 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"]
Cela retourné json avoir 2 url pour http et https . Si vous voulez seulement https url , vous res_json["tunnels"][index num]["proto"]