1111import errno
1212import threading
1313from socketserver import ThreadingMixIn , TCPServer , StreamRequestHandler
14+ from urllib .parse import urlparse , parse_qs
1415
1516from websocket_server .thread import WebsocketServerThread
1617
@@ -261,6 +262,8 @@ class WebSocketHandler(StreamRequestHandler):
261262
262263 def __init__ (self , socket , addr , server ):
263264 self .server = server
265+ self .headers = {}
266+ self .query_params = {}
264267 assert not hasattr (self , "_send_lock" ), "_send_lock already exists"
265268 self ._send_lock = threading .Lock ()
266269 if server .key and server .cert :
@@ -412,6 +415,15 @@ def send_text(self, message, opcode=OPCODE_TEXT):
412415 with self ._send_lock :
413416 self .request .send (header + payload )
414417
418+ def parse_query (self , http_get ):
419+ """
420+ Parses the query parameters from the first line.
421+ Example: "GET /?q=hello HTTP/1.1" will be parsed to {'q': ['hello']}
422+ """
423+ query = http_get .split (" " )[1 ] # example: http_get = "GET /?q=hello HTTP/1.1"
424+ parsed_url = urlparse (query )
425+ return parse_qs (parsed_url .query )
426+
415427 def read_http_headers (self ):
416428 headers = {}
417429 # first line should be HTTP GET
@@ -424,6 +436,8 @@ def read_http_headers(self):
424436 break
425437 head , value = header .split (':' , 1 )
426438 headers [head .lower ().strip ()] = value .strip ()
439+ self .headers = headers
440+ self .query_params = self .parse_query (http_get )
427441 return headers
428442
429443 def handshake (self ):
0 commit comments