首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python Flask SocketIO使用eventlet抛出SSL错误

python Flask SocketIO使用eventlet抛出SSL错误
EN

Stack Overflow用户
提问于 2018-09-13 11:38:21
回答 1查看 1.8K关注 0票数 2

我正在运行以下python代码,其中我尝试运行socketio flask应用程序并传递ssl证书文件:

代码语言:javascript
复制
from flask import Flask, render_template, request, session, Markup, current_app, jsonify
from flask_socketio import emit, SocketIO

import eventlet


from flask_babel import gettext
app = Flask(__name__)
app.config['SECRET_KEY'] = '123'
app.config['FILEDIR'] = 'static/_files/'
socketio = SocketIO(app)



if __name__ == '__main__':
    try:
        app_host = os.environ.get('APP_HOST')
        app_port = os.environ.get('APP_PORT')

        eventlet.wsgi.server(eventlet.wrap_ssl(eventlet.listen((app_host, int(app_port))),certfile ='selfsigned.crt', keyfile = 'selfsigned.key',server_side = True),app)
    except Exception as e:
        logger.error(e)

当我运行此代码时,它抛出以下SSL错误:

代码语言:javascript
复制
(21755) wsgi starting up on https://12.34.56.78:5000
(21755) accepted ('12.34.56.79', 50021)
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/eventlet/hubs/hub.py", line 458, in fire_timers
    timer()
  File "/usr/local/lib/python3.6/site-packages/eventlet/hubs/timer.py", line 58, in __call__
    cb(*args, **kw)
  File "/usr/local/lib/python3.6/site-packages/eventlet/greenthread.py", line 218, in main
    result = function(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/eventlet/wsgi.py", line 781, in process_request
    proto.__init__(conn_state, self)
  File "/usr/local/lib/python3.6/site-packages/eventlet/wsgi.py", line 335, in __init__
    self.handle()
  File "/usr/local/lib/python3.6/site-packages/eventlet/wsgi.py", line 368, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.6/site-packages/eventlet/wsgi.py", line 397, in handle_one_request
    self.raw_requestline = self._read_request_line()
  File "/usr/local/lib/python3.6/site-packages/eventlet/wsgi.py", line 380, in _read_request_line
    return self.rfile.readline(self.server.url_length_limit)
  File "/usr/local/lib/python3.6/socket.py", line 586, in readinto
    return self._sock.recv_into(b)
  File "/usr/local/lib/python3.6/site-packages/eventlet/green/ssl.py", line 204, in recv_into
    return self._base_recv(nbytes, flags, into=True, buffer_=buffer)
  File "/usr/local/lib/python3.6/site-packages/eventlet/green/ssl.py", line 225, in _base_recv
    read = self.read(nbytes, buffer_)
  File "/usr/local/lib/python3.6/site-packages/eventlet/green/ssl.py", line 139, in read
    super(GreenSSLSocket, self).read, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/eventlet/green/ssl.py", line 113, in _call_trampolining
    return func(*a, **kw)
  File "/usr/local/lib/python3.6/ssl.py", line 871, in read
    return self._sslobj.read(len, buffer)
  File "/usr/local/lib/python3.6/ssl.py", line 631, in read
    v = self._sslobj.read(len, buffer)
ssl.SSLError: [SSL: HTTP_REQUEST] http request (_ssl.c:2217)

我想要的是,这个应用程序应该在https连接上运行,但这个错误阻止了它的运行。下面是我的python和包版本的详细信息:

代码语言:javascript
复制
python 3.6.3
eventlet==0.22.1
Flask==0.12.2
Flask-SocketIO==2.9.3
EN

回答 1

Stack Overflow用户

发布于 2019-09-13 15:04:43

似乎向服务器发出的请求是使用http而不是https。您必须确保客户端也使用与服务器相同的https协议发出请求。例如,在您的客户端代码中,您必须向https://<server-ip>而不是http://<server-ip>发出请求

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52306300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档