为了账号安全,请及时绑定邮箱和手机立即绑定

我可以获取flask_ngrok或py-ngrok生成的IP地址或域名并将其返回到

我可以获取flask_ngrok或py-ngrok生成的IP地址或域名并将其返回到

冉冉说 2023-12-20 16:05:29
我正在尝试获取部署后 Flask_ngrok 或 py-ngrok 生成的域名或 IP 地址。我想将flask_app部署到本地主机并在主页上获取新的IP地址或域名。IE:如果我访问127.0.0.1/我希望它返回类似的内容 You can now log in through https://aaf8447ee878.ngrok.io/我尝试检查目录并阅读一些帮助,但我仍然无法得到它。预先感谢❤
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

添加


import atexit

import json

import os

import platform

import shutil

import subprocess

import tempfile

import time

import zipfile

from pathlib import Path

from threading import Timer


import requests



def _run_ngrok():

    ngrok_path = str(Path(tempfile.gettempdir(), "ngrok"))

    _download_ngrok(ngrok_path)

    system = platform.system()

    if system == "Darwin":

        command = "ngrok"

    elif system == "Windows":

        command = "ngrok.exe"

    elif system == "Linux":

        command = "ngrok"

    else:

        raise Exception(f"{system} is not supported")

    executable = str(Path(ngrok_path, command))

    os.chmod(executable, 777)


    ngrok = subprocess.Popen([executable, 'http', '5000'])

    atexit.register(ngrok.terminate)

    localhost_url = "http://localhost:4040/api/tunnels"  # Url with tunnel details

    time.sleep(1)

    tunnel_url = requests.get(localhost_url).text  # Get the tunnel information

    j = json.loads(tunnel_url)


    tunnel_url = j['tunnels'][0]['public_url']  # Do the parsing of the get

    tunnel_url = tunnel_url.replace("https", "http")

    return tunnel_url



def _download_ngrok(ngrok_path):

    if Path(ngrok_path).exists():

        return

    system = platform.system()

    if system == "Darwin":

        url = "https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-darwin-amd64.zip"

    elif system == "Windows":

        url = "https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-windows-amd64.zip"

    elif system == "Linux":

        url = "https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip"

    else:

        raise Exception(f"{system} is not supported")

    download_path = _download_file(url)

    with zipfile.ZipFile(download_path, "r") as zip_ref:

        zip_ref.extractall(ngrok_path)



def _download_file(url):

    local_filename = url.split('/')[-1]

    r = requests.get(url, stream=True)

    download_path = str(Path(tempfile.gettempdir(), local_filename))

    with open(download_path, 'wb') as f:

        shutil.copyfileobj(r.raw, f)

    return download_path


def start_ngrok():

    global ngrok_address

    ngrok_address = _run_ngrok()

    print(f" * Running on {ngrok_address}")

    print(f" * Traffic stats available on http://127.0.0.1:4040")



def run_with_ngrok(app):

    """

    The provided Flask app will be securely exposed to the public internet via ngrok when run,

    and the its ngrok address will be printed to stdout

    :param app: a Flask application object

    :return: None

    """

    old_run = app.run


    def new_run():

        thread = Timer(1, start_ngrok)

        thread.setDaemon(True)

        thread.start()

        old_run()

    app.run = new_run


####################

不要在name == ' main '之前导入flask_ngrok添加此函数


def ngrok_url():

    global tunnel_url

    while True:

        try:

            print(ngrok_address)

        except Exception as e:

            print(e)

并在 app.run() 之前放置


thread = Timer(1, ngrok_url)

thread.setDaemon(True)

thread.start()

并运行警告:如果您不希望在 ngrok url 函数中将 print 替换为您想要对 url 执行的任何操作,这将使您的代码编辑器/或终端崩溃


查看完整回答
反对 回复 2023-12-20
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我发现最简单的方法是在用户访问该网站时复制网址。你可以通过...来做到这一点


@app.before_request

def before_request():

    global url

    url = request.url

    # url = url.replace('http://', 'https://', 1)

    url = url.split('.ngrok.io')[0]

    url += '.ngrok.io'


查看完整回答
反对 回复 2023-12-20
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

你不需要那个


global tunnel_url

def ngrok_url():

    while True:

        try:

            print(ngrok_address)

        except Exception as e:

                print(e)

您也可以在导入集之后 删除name == ' main '之前的线程部分ngrok_address = '' ,然后您可以在代码中的任何位置访问 ngrok_address


查看完整回答
反对 回复 2023-12-20
  • 3 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信