Сбой рукопожатия Websocket в Java
Так что я'Я пытаюсь разобрать сайт, который использует websocket для отправки данных клиентам. Из того, что ямы читали:
Ссылка 1Ссылка 2Я понял, что для создания соединения мне нужно отправить специальный http-запрос на сервер, и ot получит некоторые данные, которые я использую для доступа к каналу.
Что я'мы сделали:
создал http-запрос`
`URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// optional default is GET
con.setRequestMethod("GET");
//add request header
con.setRequestProperty("Cache-Control", "no-cache");
con.setRequestProperty("Host", "www.example.com");
con.setRequestProperty("Upgrade", "websocket");
con.setRequestProperty("Connection", "upgrade");
con.setRequestProperty("Origin", "https://example.com");
con.setRequestProperty("Sec-WebSocket-Extensions", "x-webkit-deflate-frame");
con.setRequestProperty("Sec-WebSocket-Key", "QkWkChtTGpaZL5PkOMaRtg==");
con.setRequestProperty("Sec-WebSocket-Version", "13");
con.setRequestProperty("User-Agent", "Mozilla/..;
и я прочитал ответ с кодом 200 (не 101, который должен быть).
Вопросы:
Как мне сгенерировать Sec-Websocket-Key? (в примере взят из firebug, все заголовки на самом деле)1.1. Что можно сделать больше?
1.2. Эта же ссылка с http должна быть использована для доступа к веб-сокету? только с wss вместо https?
после этого я пытаюсь подключить клиента к серверу и получать сообщения методом onMessage.
WebSocketContainer container = ContainerProvider.getWebSocketContainer(); Session session = container.connectToServer(ClientEndpoint.class, buildCEC(), new URI("wss://async.example.com/socket.io/1/?t=" + System.currentTimeMillis()));
Я попытался в buildCec (), чтобы вставить заголовки для подключения к серверу.ClientEndpointConfig config = ClientEndpointConfig.Builder.create().build(); Configurator conf = config.getConfigurator();
`Map headers = new HashMap();
headers.put("Connection", Arrays.asList("keep-alive", "Upgrade"));
headers.put("Sec-Websocket-Extensions", Arrays.asList("x-webkit-deflate-frame"));
headers.put("Sec-Websocket-key", Arrays.asList("cx36sHrtuW9HZAaB6kKa/Q=="));
headers.put("Sec-Websocket-Version", Arrays.asList("13"));
headers.put("Upgrade", Arrays.asList("websocket"));
headers.put("User-Agent", Arrays.asList("Mozill..."));
conf.beforeRequest(headers);
return config;`
Вопросы
Хорошо ли мое суждение в случае, если я решу его и получу 101 код состояния из запроса на обновление http? (Я имею в виду, что мне делать дальше с этими подробностями?)Пожалуйста, не'я не осуждаю меням в начале с веб-сокетами в Java, и я неЯ слишком хорошо знаю javascript, я хочу сделать этот клиент в чистом Java с jsr-356. Я'мы сделали небольшие примеры с веб-сокетами, но я могуНигде не найти хорошего клиента с заголовками и более сложным рукопожатием.Можно ли подключиться к неизвестному серверу, не зная всех подробностей?используя программную конечную точку и импортируйте javax.websocket.ContainerProvider; за раздачу соединения через websocket от jsr356.