我有一个使用 django 实现的网络应用程序(游戏)。常规的 django 视图与 CSRF 令牌一起工作得很好,但我也想让计算机玩家与服务器交谈。我使用的是websockets(django-socketio),所以电脑玩家需要连接到SocketIOServer,但是socket.io协议中的第一个请求是post,django响应CSRF验证失败。如何在没有浏览器的情况下获取 CSRF cookie 集?(或者只是绕过计算机播放器的 CSRF 验证,但这似乎有点不安全。)
我试图用来将计算机播放器连接到服务器的代码如下所示:
def connect(self, host, port):
conn = httplib.HTTPConnection(host + ':' + str(port))
conn.request('POST','/socket.io/1/')
resp = conn.getresponse()
resp_text = resp.read()
print resp_text
hskey = resp_text.split(':')[0]
websocket.enableTrace(True)
url = 'ws://' + host + ':' + str(port) + '/socket.io/1/'
ws = websocket.WebSocketApp(url + 'websocket/' + hskey,
on_message=self.on_message,
on_close=self.on_close)
ws.on_open = self.on_open
try:
ws.run_forever()
except KeyboardInterrupt:
ws.close()
在我发出发布请求之前的某个地方,我需要获得一个 CSRF 令牌。知道怎么做吗?