web-dev-qa-db-fra.com

Afficher l'URL ngrok aléatoire lorsqu'elle est exécutée en arrière-plan

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?

23
Pterosaur

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

33
Abe Petrillo

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)
9
Gerard

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)
  })
2
James Broad
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.

1
Rex Tess

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

0
Hemanth Kondapalli

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
0
Cruz Nunez

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.

0
Jirawat Kusolpredee

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"]

0
JUN_NETWORKS