WebSocket не работает с postman (каналы django)
У меня есть проект Django, который я запускаю локально на своем mac. И я использую каналы для создания websocket соединения.
И тут произошла интересная вещь: Веб-сокет работает, когда я пытаюсь подключиться через .html файл:
myTemplate.html
const ws = new WebSocket(
'ws://'
+ window.location.host
+'/ws/test/?token='
+'**mytoken**'
);'
Я могу отправлять и получать сообщения. Но тот же URL не работает в postman или https://websocketking.com/
Сначала я подумал, что это из-за того, что я запускаю сервер локально. Но на реальном сервере вообще ничего не работает.
Я обыскал весь stackoverflow и реализовал все - безрезультатно.
asgi.py
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'spacetime.settings.dev')
django.setup()
from channels.routing import ProtocolTypeRouter,get_default_application
from channels.auth import AuthMiddlewareStack
from channels.security.websocket import AllowedHostsOriginValidator
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
from django.urls import path, re_path
from django_channels_jwt_auth_middleware.auth import JWTAuthMiddlewareStack
from myapp import consumers, routing
application = ProtocolTypeRouter({
'http': get_asgi_application(),
'websocket': AllowedHostsOriginValidator(
JWTAuthMiddlewareStack(
URLRouter(
routing.websocket_urlpatterns
)
)
),
})
настройки
ASGI_APPLICATION = 'spacetime.asgi.application'
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": [("localhost", 6379)],
},
},
}
INSTALLED_APPS = [
'daphne',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
***
]
vccode console
Django version 4.1.2, using settings 'spacetime.settings.dev'
Starting ASGI/Daphne version 4.0.0 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
vccode консоль при подключении из html файла
HTTP GET /my/socket/view/ 200 [0.01, 127.0.0.1:60258]
WebSocket HANDSHAKING /ws/test/ [127.0.0.1:60260]
WebSocket CONNECT /ws/test/ [127.0.0.1:60260]
xccode console when connectin from https://websocketking.com/
WebSocket HANDSHAKING /ws/test/ [127.0.0.1:60759]
WebSocket REJECT /ws/test/ [127.0.0.1:60759]
WebSocket DISCONNECT /ws/test/ [127.0.0.1:60759]
почтальон
Request URL: http://127.0.0.1:8000/ws/test/?token=**mytoken**
Request Method: GET
Status Code: 403 Access denied
Request Headers
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: 0VRmdvoFhma7lndljwIY6w==
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Host: 127.0.0.1:8000
Response Headers
токен в порядке
Could not connect to "ws://127.0.0.1:8000/ws/test/?token=**mytoken**". You may be able to find more information using Inspector/Dev Tools on this page.
Connecting to ws://127.0.0.1:8000/ws/test/?token=**mytoken**
redis-server
% redis-server
54336:C 07 Dec 2022 14:42:25.831 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
54336:C 07 Dec 2022 14:42:25.831 # Redis version=7.0.5, bits=64, commit=00000000, modified=0, pid=54336, just started
54336:C 07 Dec 2022 14:42:25.831 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
54336:M 07 Dec 2022 14:42:25.831 * Increased maximum number of open files to 10032 (it was originally set to 256).
54336:M 07 Dec 2022 14:42:25.831 * monotonic clock: POSIX clock_gettime
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 7.0.5 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 54336
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
54336:M 07 Dec 2022 14:42:25.832 # WARNING: The TCP backlog setting of 511 cannot be enforced because kern.ipc.somaxconn is set to the lower value of 128.
54336:M 07 Dec 2022 14:42:25.832 # Server initialized
54336:M 07 Dec 2022 14:42:25.832 * Loading RDB produced by version 7.0.5
54336:M 07 Dec 2022 14:42:25.832 * RDB age 14862 seconds
54336:M 07 Dec 2022 14:42:25.832 * RDB memory usage when created 1.05 Mb
54336:M 07 Dec 2022 14:42:25.832 * Done loading RDB, keys loaded: 0, keys expired: 0.
54336:M 07 Dec 2022 14:42:25.832 * DB loaded from disk: 0.000 seconds
54336:M 07 Dec 2022 14:42:25.832 * Ready to accept connections
есть идеи, почему он не работает с postman?
Не знаю, будет ли разница, но попробуйте сделать конфигурацию channel_layers такой
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": [("127.0.0.1", 6379)],
},
},
}