Как подключиться к веб-расписанию вручную, используя netcat/socat/telnet?

Я пытаюсь подключиться к эталонному эхо-серверу websocket "вручную", чтобы узнать, как работает протокол (для этого я использую для этого socat). Однако сервер неизменно закрывает соединение без предоставления ответа. Любая идея почему?

Вот что я делаю:

socat - TCP:echo.websocket.org:80

Затем вставьте следующий текст в терминал:

GET /?encoding=text HTTP/1.1
Origin: http://www.websocket.org
Connection: Upgrade
Host: echo.websocket.org
Sec-WebSocket-Key: P7Kp2hTLNRPFMGLxPV47eQ==
Upgrade: websocket
Sec-WebSocket-Version: 13

Я понюхал параметры соединения с инструментами разработчика в firefox на той же машине, где это работает безупречно: поэтому я бы предположил, что они верны. Однако после этого сервер немедленно закрывает соединение, не предоставляя ответа. Зачем? Как я могу реализовать протокол "вручную"?

Я бы хотел, чтобы на моем терминале был введен тест типа, и чтобы сервер ответил на то, что я набрал (он работает в веб-браузере).

Ответы

Ответ 1

Я думаю, вы хотите изменить поток сокета для перевода \n (строки) на CRLF (возврат каретки и фид строки). Выполнение info socat создает подробную информацию, которая включает этот модификатор:

crnl   Converts the default line termination character NL ('\n',  0x0a)
       to/from CRNL ("\r\n", 0x0d0a) when writing/reading on this chan-
       nel (example).  Note: socat simply strips all CR characters.

Итак, я думаю, вы должны это сделать:

socat - TCP:echo.websocket.org:80,crnl