socketio无法从python获取数据到角前端,它将错误显示为"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://my ip:3000/socket.io/?EIO=3&transport=polling&t=NQtJeHE. (Reason: CORS request did not succeed)“。
while True:
sio.emit('livedata', {data'})没有从python进入角,显示了上面的错误
发布于 2020-12-31 14:07:02
默认情况下,python-socketio强制执行同源政策。这意味着如果您的socketio服务器运行在http://myip:5000上,那么它将只接受来自该来源的请求。所以在您的例子中,它阻止来自您的角度前端的请求,因为请求来自http://myip:3000
如果有必要,可以使用cors_allowed_origins选项来允许其他来源。此参数可以设置为字符串以设置单个允许的来源,也可以设置为允许多个来源的列表。一个特殊的值'*‘可以用来指示服务器允许所有来源,但这应该小心,因为这可能使服务器易受跨站点请求伪造(CSRF)攻击。
如何修复:
使用要允许来自python-socketio的请求的源文件列表初始化您的服务器。在本例中,这是您的角应用程序和python应用程序。使用以下内容(假设您的python服务器在本地运行,端口5000,角在3000):
sio = socketio.Server(cors_allowed_origins=['http://myip:5000', 'http://myip:3000'])
现在应该管用了。
Note:您也可以执行以下操作,但这将接受来自ALL源起的请求,因此要小心,因为它会打开您的CSRF攻击:
sio = socketio.Server(cors_allowed_origins='*')
附加注意事项:如果使用flask-socketio (python-socketio的flask-socketio扩展包装器),那么在初始化(或init_app方法)时,只需将相同的cors_allowed_origins参数传递到SocketIO对象。您还需要在您的Flask应用程序上启用CORS --我建议您使用和阅读关于烧瓶扩展的文档--这使得它非常简单。
发布于 2021-01-02 09:01:05
使用异步模式线程进行多处理,而cros用于安全性,则可以使用
cors_allowed_=‘*’
import threading
socketio = SocketIO(app,cors_allowed_origins=['http://pythonserver-ip:port','http://angular-ip:4200'],async_mode='threading')对于睡眠时间循环,使用以下代码代替time.sleep(2)
socketio.sleep(2)https://stackoverflow.com/questions/65517293
复制相似问题