from fastapi import Cookie, Depends, FastAPI, Header, WebSocket, status from fastapi.responses import HTMLResponse app = FastAPI() html = """ Chat

WebSocket Chat


""" @app.get("/") async def get(): return HTMLResponse(html) async def get_cookie_or_client( websocket: WebSocket, session: str = Cookie(None), x_client: str = Header(None) ): if session is None and x_client is None: await websocket.close(code=status.WS_1008_POLICY_VIOLATION) return session or x_client @app.websocket("/items/{item_id}/ws") async def websocket_endpoint( websocket: WebSocket, item_id: int, q: str = None, cookie_or_client: str = Depends(get_cookie_or_client), ): await websocket.accept() while True: data = await websocket.receive_text() await websocket.send_text( f"Session Cookie or X-Client Header value is: {cookie_or_client}" ) if q is not None: await websocket.send_text(f"Query parameter q is: {q}") await websocket.send_text(f"Message text was: {data}, for item ID: {item_id}")