Получить IP-адрес на Django-каналах - на обработчике получения
Мы получаем IP-адрес клиента веб-сокета как message.content["client"]
в connect
обработчик. но этот код не работает в receive
обработчик. Есть ли способ получить IP-адрес клиента в receive
обработчик?
Редактировать:
В 'dphane/ws_protocol.py', в классе WebSocketProtocol
Я вижу это в onconnect
код
self.request_info = {
"path": self.unquote(self.path),
"headers": self.clean_headers,
"query_string": self._raw_query_string, # Passed by HTTP protocol
"client": self.client_addr,
"server": self.server_addr,
"reply_channel": self.reply_channel,
"order": 0,
}
...
...
self.channel_layer.send("websocket.connect", self.request_info)
где как в onmessage
код
if isBinary:
self.channel_layer.send("websocket.receive", {
"reply_channel": self.reply_channel,
"path": self.unquote(self.path),
"order": self.packets_received,
"bytes": payload,
})
else:
self.channel_layer.send("websocket.receive", {
"reply_channel": self.reply_channel,
"path": self.unquote(self.path),
"order": self.packets_received,
"text": payload.decode("utf8"),
})
Мы не получаем клиентский IP, потому что Dphane не дает эту информацию в message
обработчик.
Есть ли способ кроме наследования класса WebSocketProtocol и переопределения onmessage
2 ответа
Вы можете исправить это, используя request.META['REMOTE_ADDR']
Не уверен, что это все еще проблема, но вы должны посмотреть на получение message.content["client"] в сеансе. Таким образом, когда вы получаете ваше сообщение, вы можете получить IP в сеансе.