У меня есть следующий код для моего питона сервера, чтобы создать и отправить обратно ответ на рукопожатияПочему подтверждение подключения к websocket не выполняется?
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"))
Я проверил мой метод вычисления ключа с примером на википедии, поэтому я знаю, что это правильно. Однако каждый раз, когда я пытаюсь подключиться к серверу я получаю после ошибки:
Error during WebSocket handshake: Sec-WebSocket-Accept mismatch
Я не понимаю, что я делаю неправильно здесь. кто-то видит, что происходит не так?
EDIT: пример вывода из гравюр, печатается исходное сообщение и сфабрикованные рукопожатия
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=
Опубликовать выходные данные ваших вызовов 'print()' в вашем вопросе. –
Я отредактировал op с выходом для печати – WillieWonka