hallo allemaal,
ik probeer op het moment een websocket server te maken in python 3. Het probleem is alleen dat ik bij iedere poging de volgende foutmelding krijg:
aan de clientside.
ik heb opgezocht hoe die key gegenereert wordt en heb de volgende functie voor gemaakt:
ik heb de key van wikipedia ingevuld en gekeken wat eruit kwam en dit klopte precies. Op google zijn er veel topics over te vinden maar dat gaat of over dat er hexdigest wordt gebruikt ipv digest of wordt de key niet volgens de juiste manier berekend, waarop er vervolgens een wiki link wordt gestuurd.
maar bij mij klopt de key dus volgens de officiele methode. heb ook netjes /r/n gebruikt en aan het einde een whiteline.
Toch gereject de client deze handshake. weet iemand wat ik fout doe/kan proberen te verbeteren? alvast bedankt!
EDIT:
de output wat de prints geven:
ik probeer op het moment een websocket server te maken in python 3. Het probleem is alleen dat ik bij iedere poging de volgende foutmelding krijg:
code:
1
| Error during WebSocket handshake: Sec-WebSocket-Accept mismatch |
aan de clientside.
ik heb opgezocht hoe die key gegenereert wordt en heb de volgende functie voor gemaakt:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| def HandShake(self, request): specificationGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" websocketkey = "" protocol = "" for line in request.split("\n"): if "Sec-WebSocket-Key:" in line: websocketkey = line.split(" ")[1] elif "Sec-WebSocket-Protocol" in line: protocol = line.split(":")[1].strip() print("websocketkey: " + websocketkey + "\n") fullKey = hashlib.sha1(websocketkey.encode("utf-8") + specificationGUID.encode("utf-8")).digest() acceptKey = base64.b64encode(fullKey) print("acceptKey: " + str(acceptKey, "utf-8") + "\n") if protocol != "": handshake = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " + str(acceptKey, "utf-8") + "\r\nSec-WebSocket-Protocol: " + protocol + "\r\n\r\n" else: handshake = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " + str(acceptKey, "utf-8") + "\r\n\r\n" print(handshake) self.request.send(bytes(handshake, "utf-8")) |
ik heb de key van wikipedia ingevuld en gekeken wat eruit kwam en dit klopte precies. Op google zijn er veel topics over te vinden maar dat gaat of over dat er hexdigest wordt gebruikt ipv digest of wordt de key niet volgens de juiste manier berekend, waarop er vervolgens een wiki link wordt gestuurd.
maar bij mij klopt de key dus volgens de officiele methode. heb ook netjes /r/n gebruikt en aan het einde een whiteline.
Toch gereject de client deze handshake. weet iemand wat ik fout doe/kan proberen te verbeteren? alvast bedankt!
EDIT:
de output wat de prints geven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| server started, waiting for connections... request: GET / HTTP/1.1 Upgrade: websocket Connection: Upgrade Host: localhost:600 Origin: http://localhost Pragma: no-cache Cache-Control: no-cache Sec-WebSocket-Key: yLffHPqMU4gIW2WnKq+4BQ== Sec-WebSocket-Version: 13 Sec-WebSocket-Extensions: x-webkit-deflate-frame User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 websocketkey: yLffHPqMU4gIW2WnKq+4BQ== acceptKey: A0eCd19URtkji0OPV162okWsCns= HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: A0eCd19URtkji0OPV162okWsCns= |
[ Voor 14% gewijzigd door williewonka03 op 22-12-2013 13:02 ]