如何修复 Flask ngrok 中的托管地址

Posted

技术标签:

【中文标题】如何修复 Flask ngrok 中的托管地址【英文标题】:How to fix the hosting address in Flask ngrok 【发布时间】:2021-11-30 07:38:47 【问题描述】:

我通过flask ngrok将我计算机上的一个API用作服务器,它会生成一个用户可以远程使用我的API的地址,但是每次我运行我的api时,它都会生成一个随机地址,如下所示:http://1b1c-187- 121-198-62.ngrok.io 如何生成固定地址?

这是我的主要代码:

from flask_ngrok import run_with_ngrok
from flask import Flask, flash, request, redirect, url_for, render_template
import os
from werkzeug.utils import secure_filename
from PIL import Image, ImageOps

#app = Flask(__name__)
app = Flask(__name__, template_folder='./templates')
run_with_ngrok(app)   #starts ngrok when the app is run


UPLOAD_FOLDER = './static/'
 
app.secret_key = "secret key"
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
 
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])
@app.route('/')
def index():
    return render_template('index.html')
        
########################################
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
          
@app.route('/', methods=['POST'])
def upload_image():                       
    if 'file' not in request.files:
        flash('No file part')
        #return redirect(request.url)
    file = request.files['file']
    if file.filename == '':
        flash('No image selected for uploading')
        #return redirect(request.url)
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        #file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], 'foto.jpeg'))

        #### Padronizando tamanho de foto
        basewidth = 400
        # My image is a 200x374 jpeg that is 102kb large
        foo = Image.open('./static/foto.jpeg')
        wpercent = (basewidth/float(foo.size[0]))
        # I downsize the image with an ANTIALIAS filter (gives the highest quality)
        hsize = int((float(foo.size[1])*float(wpercent)))
        foo = foo.resize((basewidth,hsize), Image.ANTIALIAS)
        foo = ImageOps.exif_transpose(foo)
        foo.save("./static/fase1/foto.jpeg",optimize=True,quality=95)
        #foo.save("./static/foto2.jpeg", optimize=True,quality=50)
        #########

        #### Meu código
        #os.remove('./static/foto.png')
        #os.remove('./static/uploads/foto2.png')
        os.system('python evala.py --trained_model=./weights/yolact_plus_resnet50_meat_3700_495900.pth --config=yolact_resnet50_meat_config --score_threshold=0.8 --top_k=100 --images=./static/fase1:./static/mask')
        #### 
        # get directory path where you want to save the images
          #print('upload_image filename: ' + filename)
        flash('Image successfully uploaded and displayed below')
        return render_template('index.html', filename=filename)
    else:
        flash('Allowed image types are - png, jpg, jpeg, gif')
        return redirect(request.url)

@app.route('/display/<filename>')
def display_image(filename):
    return redirect(url_for('static', filename='uploads/foto2.jpeg'), code=301)

app.run()

OBS:我的代码不起作用,它只是为了展示我的代码的基础。

【问题讨论】:

我认为您必须为此付费。很久以前我也遇到过同样的问题,我通过从 pythonanywhere.com 获取一个静态端点来解决它,并且每当 ngrok 服务器重新启动时,它只会告诉 python Anywhere 服务器新的端点。你可以在这里查看github.com/epsi95/Sharefi 自定义域名需要付费计划。 但是我将我的 PC 用作服务器,我只需要一个固定地址...但是谢谢您的时间。 =) 我建议使用pyngrok 而不是flask-ngrok,因为它为您提供了更多的灵活性。其他人认为您要求的内容需要付费计划是正确的,但是抓住从connect 返回的public_url,您可以自动化您的工作流程,这样更改的 URL 就不会成为您的应用程序的问题。 【参考方案1】:

正如其他人之前提到的,这需要一个paid plan,它将为您提供自定义域和保留域。

对于免费替代方案,您可以使用 localtunnel 请求子域 (-s)。

【讨论】:

以上是关于如何修复 Flask ngrok 中的托管地址的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 ngrok 权限被拒绝?

如何使用弹性 beantalk 和 aws 修复 Flask 应用程序中的内部服务器错误

如何修复“[OData Source [56]] 错误:无法从运行时连接管理器获取托管连接。” SSIS中的错误?

如何使用 flask-cors 库修复 python flask cors 问题

我可以获取flask_ngrok或py-ngrok生成的ip地址或域名并返回到127.0.0.1/

如何在 WCF 中修复“找不到与架构 http 匹配的基地址”...