在https服务器上提供Flask-RESTPlus

Mos*_*osd 8 flask python-3.x flask-restplus

我是python的新手,我使用flask-resplus创建了一个微服务。在我的计算机和带有http的开发服务器上都能正常工作。我无法控制微服务的部署位置。在这些情况下,它似乎位于负载均衡器(不确定细节)的后面,并通过https进行了服务。

浏览器给出的实际错误:无法从服务器读取。它可能没有适当的访问控制源设置。

当我检查网络开发人员工具时,我看到它无法加载swagger.json。但是正在使用以下命令进行检查: http://hostname/api/swagger.json,而不是https。

我一直在搜索,并且遇到了有关问题的讨论。而似乎是可以没有我不得不更改库或配置的服务器上运行此修复程序。

但是,我仍然无法使它工作。

这就是我所拥有的:

在api文件上:

api_blueprint = Blueprint('api', __name__, url_prefix='/api')
api = Api(api_blueprint, doc='/doc/', version='1.0', title='My api',
          description="My api")
Run Code Online (Sandbox Code Playgroud)

在主应用程序文件上:

from flask import Flask
from werkzeug.contrib.fixers import ProxyFix

from lib.api import api_blueprint

app = Flask(__name__)

app.wsgi_app = ProxyFix(app.wsgi_app)
app.register_blueprint(api_blueprint)
Run Code Online (Sandbox Code Playgroud)

还尝试添加:

app.config['SERVER_URL'] = 'http://testfsdf.co.za' # but it dont look like is being considered
Run Code Online (Sandbox Code Playgroud)

使用flask-restplus == 0.9.2,

只要我不需要在将要部署服务的容器上进行配置(可以设置环境变量即可),即服务需要自包含,就可以理解任何解决方案。而且,如果我可以通过pip安装flask-resplus的一个版本,那么已经可以修复了。

谢谢大家

Ily*_*dov 7

用属性中的_scheme='https'选项覆盖API类spec

class MyApi(Api):
    @property
    def specs_url(self):
        """Monkey patch for HTTPS"""
        scheme = 'http' if '5000' in self.base_url else 'https'
        return url_for(self.endpoint('specs'), _external=True, _scheme=scheme)

api = MyApi(api_blueprint, doc='/doc/', version='1.0', title='My api',
        description="My api")
Run Code Online (Sandbox Code Playgroud)