1

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 socketio emits 将它变成角度显示上述错误

4

2 回答 2

1

python-socketio默认情况下执行同源策略。这意味着如果您的 socketio 服务器正在运行http://myip:5000,那么它将只接受来自该来源的请求。因此,在您的情况下,它会阻止来自您的角度前端的请求,因为请求来自http://myip:3000

根据python-socketio 文档

如有必要,可使用 cors_allowed_origins 选项来允许其他来源。此参数可以设置为字符串以设置单个允许的来源,或设置为列表以允许多个来源。'*' 的特殊值可用于指示服务器允许所有来源,但应谨慎执行,因为这可能使服务器容易受到跨站点请求伪造 (CSRF) 攻击。

怎么修:

python-socketio使用您希望允许来自的请求的来源列表初始化您的服务器。在这种情况下,这就是您的 Angular 应用程序和您的 python 应用程序。使用类似下面的东西(假设你的 python 服务器在本地端口 5000 上运行,角度在 3000 上):

sio = socketio.Server(cors_allowed_origins=['http://myip:5000', 'http://myip:3000'])

它现在应该可以工作了。

注意:您也可以执行以下操作,但这将接受来自所有来源的请求,因此请小心,因为它可能会使您面临 CSRF 攻击:

sio = socketio.Server(cors_allowed_origins='*')

附加说明:如果您正在使用flask-socketio(的 Flask 扩展包装器python-socketio),只需在初始化(或方法)cors_allowed_origins参数传递给您还需要在您的 Flask 应用程序上启用 CORS - 我建议使用和阅读有关Flask-CORS扩展的文档 - 这使得它非常简单。SocketIOinit_app

于 2020-12-31T14:07:02.767 回答
0

使用异步模式线程进行多处理和 cros 安全可以使用

cors_allowed_origins=['*'] 对于所有

import threading
socketio = SocketIO(app,cors_allowed_origins=['http://pythonserver-ip:port','http://angular-ip:4200'],async_mode='threading')

对于 while 循环中的睡眠,请使用此代码而不是 time.sleep(2)

socketio.sleep(2)
于 2021-01-02T09:01:05.557 回答