./ngrok tcp 22
でngrokクライアントを起動すると、フォアグラウンドで実行され、tcp://0.tcp.ngrok.io:12345 -> localhost:22
などのランダムに生成された転送URLを確認できます。
./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)
それが誰かを助けるならば、私はノードで生成されたランダムな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)
})
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」という名前の「トンネル」を探します。
./ngrok httpを実行&これにより、ngrokトンネルがバックグラウンドプロセスとして実行されます。 Ngrokは通常、割り当てられたURLを示すウィンドウを開きますが、Nohupコマンドを使用しているため、これは表示されません。
したがって、curl http://127.0.0.1:4040/api/tunnels を実行します。ngrokによって割り当てられたURLも参照してください。
最初のトンネルを取得したい場合、jq
が友達になります。
curl -s localhost:4040/api/tunnels | jq -r .tunnels[0].public_url
Ngrokの複数のインスタンスを実行する場合は、トンネル名/api/tunnels/:name
。
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
これを行うには、ngrok.comのアカウントにログインするだけのより良い方法があります。 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"]