11
11
import errno
12
12
import threading
13
13
from socketserver import ThreadingMixIn , TCPServer , StreamRequestHandler
14
+ from urllib .parse import urlparse , parse_qs
14
15
15
16
from websocket_server .thread import WebsocketServerThread
16
17
@@ -261,6 +262,8 @@ class WebSocketHandler(StreamRequestHandler):
261
262
262
263
def __init__ (self , socket , addr , server ):
263
264
self .server = server
265
+ self .headers = {}
266
+ self .query_params = {}
264
267
assert not hasattr (self , "_send_lock" ), "_send_lock already exists"
265
268
self ._send_lock = threading .Lock ()
266
269
if server .key and server .cert :
@@ -412,6 +415,15 @@ def send_text(self, message, opcode=OPCODE_TEXT):
412
415
with self ._send_lock :
413
416
self .request .send (header + payload )
414
417
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
+
415
427
def read_http_headers (self ):
416
428
headers = {}
417
429
# first line should be HTTP GET
@@ -424,6 +436,8 @@ def read_http_headers(self):
424
436
break
425
437
head , value = header .split (':' , 1 )
426
438
headers [head .lower ().strip ()] = value .strip ()
439
+ self .headers = headers
440
+ self .query_params = self .parse_query (http_get )
427
441
return headers
428
442
429
443
def handshake (self ):
0 commit comments