WebSocketRoute
Всякий раз, когда маршрут WebSocket настраивается с помощью page.routeWebSocket() или browserContext.routeWebSocket(), объект WebSocketRoute позволяет обрабатывать соединение WebSocket, как это делает реальный сервер.
Моделирование
По умолчанию маршрутизированное соединение WebSocket не подключается к серверу. Таким образом, вы можете смоделировать весь обмен данными через WebSocket. Вот пример, который отвечает на "request" сообщением "response".
await page.routeWebSocket('wss://example.com/ws', ws => {
ws.onMessage(message => {
if (message === 'request')
ws.send('response');
});
}); Поскольку мы не вызываем webSocketRoute.connectToServer() внутри обработчика маршрута WebSocket, Playwright предполагает, что соединение WebSocket будет смоделировано и автоматически откроет WebSocket на странице.
Вот другой пример, который обрабатывает JSON-сообщения:
await page.routeWebSocket('wss://example.com/ws', ws => {
ws.onMessage(message => {
const json = JSON.parse(message);
if (json.request === 'question')
ws.send(JSON.stringify({ response: 'answer' }));
});
}); Перехват
В качестве альтернативы, вы можете подключиться к реальному серверу, но перехватывать сообщения между ними и изменять или блокировать их. Вызов webSocketRoute.connectToServer() возвращает экземпляр WebSocketRoute серверной стороны, которому вы можете отправлять сообщения или обрабатывать входящие сообщения.
Ниже приведен пример, который изменяет некоторые сообщения, отправляемые страницей на сервер. Сообщения, отправленные с сервера на страницу, остаются неизменными, используя стандартную передачу.
await page.routeWebSocket('/ws', ws => {
const server = ws.connectToServer();
ws.onMessage(message => {
if (message === 'request')
server.send('request2');
else
server.send(message);
});
}); После подключения к серверу все сообщения по умолчанию передаются между страницей и сервером.
Однако, если вы вызовете webSocketRoute.onMessage() на исходном маршруте, сообщения со страницы на сервер больше не будут передаваться, а вместо этого должны обрабатываться обработчиком.
Аналогично, вызов webSocketRoute.onMessage() на WebSocket серверной стороны прекратит передачу сообщений с сервера на страницу, и обработчик должен позаботиться о них.
Следующий пример блокирует некоторые сообщения в обоих направлениях. Поскольку он вызывает webSocketRoute.onMessage() в обоих направлениях, никакой автоматической передачи не происходит.
await page.routeWebSocket('/ws', ws => {
const server = ws.connectToServer();
ws.onMessage(message => {
if (message !== 'blocked-from-the-page')
server.send(message);
});
server.onMessage(message => {
if (message !== 'blocked-from-the-server')
ws.send(message);
});
}); Методы
close
Закрывает одну сторону соединения WebSocket.
Использование
await webSocketRoute.close(); await webSocketRoute.close(options);
Аргументы
-
optionsОбъект (необязательно)-
codeчисло (необязательно)Необязательный код закрытия.
-
reasonстрока (необязательно)Необязательное описание причины закрытия.
-
Возвращает
connectToServer
По умолчанию маршрутизированное соединение WebSocket не подключается к серверу, поэтому вы можете смоделировать весь обмен данными через WebSocket. Этот метод подключается к фактическому WebSocket серверу и возвращает экземпляр WebSocketRoute серверной стороны, предоставляя возможность отправлять и получать сообщения с сервера.
После подключения к серверу:
- Полученные с сервера сообщения будут автоматически передаваться в WebSocket на странице, если не вызвана webSocketRoute.onMessage() на серверной стороне
WebSocketRoute. - Сообщения, отправленные через вызов
WebSocket.send()на странице, будут автоматически передаваться на сервер, если не вызвана webSocketRoute.onMessage() на исходнойWebSocketRoute.
Более подробную информацию см. в примерах вверху страницы.
Использование
webSocketRoute.connectToServer();
Возвращает
onClose
Позволяет обработать WebSocket.close.
По умолчанию закрытие одной стороны соединения, как на странице, так и на сервере, закроет другую сторону. Однако, если задан обработчик webSocketRoute.onClose(), стандартная передача закрытия отключена, и обработчик должен позаботиться о ней.
Использование
webSocketRoute.onClose(handler);
Аргументы
-
handlerфункция(число | [undefined]):Promise<Объект> | ОбъектФункция, которая будет обрабатывать закрытие WebSocket. Получает необязательный код закрытия и необязательное описание причины закрытия.
onMessage
Этот метод позволяет обрабатывать сообщения, отправленные через WebSocket, как со страницы, так и с сервера.
При вызове на исходном маршруте WebSocket этот метод обрабатывает сообщения, отправленные со страницы. Вы можете обработать эти сообщения, ответив на них с помощью webSocketRoute.send(), передав их на серверное соединение, возвращенное webSocketRoute.connectToServer(), или сделать что-то еще.
После вызова этого метода сообщения не будут автоматически передаваться на сервер или на страницу — вы должны сделать это вручную, вызвав webSocketRoute.send(). Более подробную информацию см. в примерах вверху страницы.
Повторный вызов этого метода перезапишет обработчик новым.
Использование
webSocketRoute.onMessage(handler);
Аргументы
send
Отправляет сообщение в WebSocket. При вызове на исходном WebSocket отправляет сообщение на страницу. При вызове на результате webSocketRoute.connectToServer() отправляет сообщение на сервер. Более подробную информацию см. в примерах вверху страницы.
Использование
webSocketRoute.send(message);
Аргументы
url
URL WebSocket, созданного на странице.
Использование
webSocketRoute.url();
Возвращает
© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-websocketroute