web-dev-qa-db-ja.com

バックグラウンドで実行したときにランダムなngrok URLを表示する

./ngrok tcp 22でngrokクライアントを起動すると、フォアグラウンドで実行され、tcp://0.tcp.ngrok.io:12345 -> localhost:22などのランダムに生成された転送URLを確認できます。

./ngrok tcp &でバックグラウンドで実行すると、転送URLを確認する方法が見つかりません。バックグラウンドでngrokを実行してもURLを表示するにはどうすればよいですか?

25
Pterosaur

いくつかの方法があります。

次のいずれかを実行できます。

1)localhost:4040/statusブラウザで大量の情報を表示する、または

2)curlを使用してAPIにアクセスします:localhost:4040/api/tunnels

37
Abe Petrillo

この小さな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)
10
Gerard

それが誰かを助けるならば、私はノードで生成されたランダムな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)
  })
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

これは、JUN_NETWORKS python 3コードの編集です。HTTPSURLのみを出力します。Ngrokは、URLが最初に表示される順序をランダムに変更することがあります。 HTTPS URLである「command_line」という名前の「トンネル」を探します。

2
Rex Tess

./ngrok httpを実行&これにより、ngrokトンネルがバックグラウンドプロセスとして実行されます。 Ngrokは通常、割り当てられたURLを示すウィンドウを開きますが、Nohupコマンドを使用しているため、これは表示されません。

したがって、curl http://127.0.0.1:4040/api/tunnels を実行します。ngrokによって割り当てられたURLも参照してください。

0

最初のトンネルを取得したい場合、jqが友達になります。

curl -s localhost:4040/api/tunnels | jq -r .tunnels[0].public_url

Ngrokの複数のインスタンスを実行する場合は、トンネル名/api/tunnels/:name

0
avalanchy

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

これを行うには、ngrok.comのアカウントにログインするだけのより良い方法があります。 URLはダッシュボードに表示されます。

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にhttphttpsの2つのURLを返します。 https urlのみが必要な場合、res_json["tunnels"][index num]["proto"]

0
JUN_NETWORKS