#заметка дня Мобильная разработка, как ни крути, выходит ближ | Будни разработчика
#заметка дня
Мобильная разработка, как ни крути, выходит ближе к железу и понимать в ней нужно чуть больше.
Да, это опять я со своим нытьём про Dart и Flutter, которое можно найти по тегу #remote. И сегодня мы поговорим о сокетах. Конкретно — WebSockets.
Вы наверняка должны были задуматься, откуда в вебсокетах приставка "веб". И ответ на самом деле простой: потому что они реализованы поверх протокола HTTP, для чего используется, очевидно, некий HTTP-клиент. В браузерах свой, в Node.js свой, в мобильных фреймворках свой.
Что из этого следует, например? Ну, что сертификаты наруливаются согласно спецификации HTTPS. И тут начинается самое интересное.
Нода и браузеры вам прощают вообще все. Предполагается, что веб-разработчику вообще не надо толком думать, а что там внутри.
Вот у телевизоров Samsung сертификат самоподписанный. Вебсокеты по протоколу wss (websocket secure) работать с таким откажутся, но всё, что надо сделать в JS — передать опцию allowUnauthorized. Всё, полетели жисоны.
Что надо сделать в том же Dart/Flutter?
Перегрузить (заменить, override) библиотечный HTTP-клиент!
Вот так:
class SamsungHttpOverrides extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)
..badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
}
}
И дальше есть выбор, делать это на глобальном уровне, или передать в конструктор. В моём случае — глобально, поскольку API тоже спрятан за самоподписанным сертификатом:
HttpOverrides.global = SamsungHttpOverrides();
И такое на каждом шагу. Нельзя просто так взять и...
Может, поэтому мобильным разработчикам зачастую больше платят?
#flutter #remote #dart #websocket