烧瓶插座 CORS
flask socketio CORS
我一直在尝试通过套接字 io 从烧瓶发送数据。我需要从不同的来源访问这些数据,但它给出了 CORS 错误。我尝试过使用各种跨源的东西并且 none 有效。有人可以帮忙吗。
认为socket io应该调用的视图:
from flask.ext.cors import cross_origin
@socketio.on('increment',namespace="/api")
@cross_origin()
def increment(message):
number += 1;
emit('number',{'data':number},broadcast=True)
运行服务器:
app = Flask(__name__)
cors = CORS(app,resources={r"/api/*":{"origins":"*"}})
socketio = SocketIO(app)
app.debug = True
app.host = '0.0.0.0'
socketio.run(app)
我遇到了类似的问题,使用此设置可以正常工作:
#you may not need all these options
from flask import Flask, render_template, request
from flask.ext.socketio import SocketIO, emit, join_room, leave_room
from flask.ext.cors import CORS
app = Flask(__name__, template_folder='./', static_folder='./', static_url_path='')
app.config['SECRET_KEY'] = 'some-super-secret-key'
app.config['DEFAULT_PARSERS'] = [
'flask.ext.api.parsers.JSONParser',
'flask.ext.api.parsers.URLEncodedParser',
'flask.ext.api.parsers.FormParser',
'flask.ext.api.parsers.MultiPartParser'
]
cors = CORS(app,resources={r"/*":{"origins":"*"}})
socketio = SocketIO(app)
socketio.run(app,port=5000,host='0.0.0.0')
您可以这样设置路由:
@app.route("/")
def indexRoute():
return render_template('index.html',version=VER)
和套接字请求:
@socketio.on('connect',namespace="/home")
def test_connect():
print "client connected:",rooms()[0]
在 JS 的客户端,我做了以下事情:
var socket = io.connect('http://' + location.hostname + ':5000/home');
socket.on('connect',function(data) {
console.log('connected to socket');
});
此外,请查看 Flask 开发人员的 this 片段。
我通过以下方式解决了:
socketio = SocketIO(app, cors_allowed_origins="*")
检查您在 html 文件中使用的 socket.io 版本是否受支持。
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.4/socket.io.js" integrity="sha512-aMGMvNYu8Ue4G+fHa359jcPb1u+ytAF+P2SCb+PxrjCdO3n3ZTxJ30zuH39rimUggmTwmh2u7wvQsDTHESnmfQ==" crossorigin="anonymous"></script>
出于某种原因,cors_allowed_origins="*"
对我不起作用。我不得不改为指定来源的完整地址,如下所示:
socketio = SocketIO(app, cors_allowed_origins=['http://127.0.0.1:5500'])
显示 "<client_address> is not an accepted origin. (further occurrences of this error will be logged with level info)"
的错误消息应该指出您应该输入哪个地址。
我一直在尝试通过套接字 io 从烧瓶发送数据。我需要从不同的来源访问这些数据,但它给出了 CORS 错误。我尝试过使用各种跨源的东西并且 none 有效。有人可以帮忙吗。
认为socket io应该调用的视图:
from flask.ext.cors import cross_origin
@socketio.on('increment',namespace="/api")
@cross_origin()
def increment(message):
number += 1;
emit('number',{'data':number},broadcast=True)
运行服务器:
app = Flask(__name__)
cors = CORS(app,resources={r"/api/*":{"origins":"*"}})
socketio = SocketIO(app)
app.debug = True
app.host = '0.0.0.0'
socketio.run(app)
我遇到了类似的问题,使用此设置可以正常工作:
#you may not need all these options
from flask import Flask, render_template, request
from flask.ext.socketio import SocketIO, emit, join_room, leave_room
from flask.ext.cors import CORS
app = Flask(__name__, template_folder='./', static_folder='./', static_url_path='')
app.config['SECRET_KEY'] = 'some-super-secret-key'
app.config['DEFAULT_PARSERS'] = [
'flask.ext.api.parsers.JSONParser',
'flask.ext.api.parsers.URLEncodedParser',
'flask.ext.api.parsers.FormParser',
'flask.ext.api.parsers.MultiPartParser'
]
cors = CORS(app,resources={r"/*":{"origins":"*"}})
socketio = SocketIO(app)
socketio.run(app,port=5000,host='0.0.0.0')
您可以这样设置路由:
@app.route("/")
def indexRoute():
return render_template('index.html',version=VER)
和套接字请求:
@socketio.on('connect',namespace="/home")
def test_connect():
print "client connected:",rooms()[0]
在 JS 的客户端,我做了以下事情:
var socket = io.connect('http://' + location.hostname + ':5000/home');
socket.on('connect',function(data) {
console.log('connected to socket');
});
此外,请查看 Flask 开发人员的 this 片段。
我通过以下方式解决了:
socketio = SocketIO(app, cors_allowed_origins="*")
检查您在 html 文件中使用的 socket.io 版本是否受支持。
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.4/socket.io.js" integrity="sha512-aMGMvNYu8Ue4G+fHa359jcPb1u+ytAF+P2SCb+PxrjCdO3n3ZTxJ30zuH39rimUggmTwmh2u7wvQsDTHESnmfQ==" crossorigin="anonymous"></script>
出于某种原因,cors_allowed_origins="*"
对我不起作用。我不得不改为指定来源的完整地址,如下所示:
socketio = SocketIO(app, cors_allowed_origins=['http://127.0.0.1:5500'])
显示 "<client_address> is not an accepted origin. (further occurrences of this error will be logged with level info)"
的错误消息应该指出您应该输入哪个地址。