MyTetra Share
Делитесь знаниями!
Как в Linux скачать файл через curl или wget в условиях блокировки РКН?
Время создания: 19.01.2026 12:05
Текстовые метки: linux, curl, wget, блокировка, файл, скачать, выкачать, 16Кб, 16 Кб, 16Kb, роскомнадзор, РКН
Раздел: Компьютер - Web / Internet - Отключение блокировок
Запись: xintrea/mytetra_syncro/master/base/1768813500gt2hwdej2k/text.html на raw.githubusercontent.com

Стало известно, что с января 2026 года РКН стал резать траффик для законно и незаконно заблокированных ресурсов новым методом: теперь от заблокированного ресурса пропускается пакеты объемом до 16Кб.



Что такое незаконно заблокированные ресурсы? Это ресурсы, которые не нарушают законы Российской Федерации, но по неизвестным причинам включены в списки Роскомнадзора. Классический пример - это YouTube. Законного обоснования в блокировке этого ресурса нет (в отличие от WhatsUp), но блокировка YouTube происходит в РФ негласным образом. Делается это по двум причинам:


1. YouTube, как площадка, сама имеет возможность блокировать контент, и под политическую блокировку YouTube попали каналы государственных новостных агенств РФ. Так как YouTube - частная лавочка с зарубежной юрисдикцией, она сама может решать, что запрещать к показу на своем сервисе. Да, это неприятно, но законодательство РФ здесь не нарушается. Поэтому властями был взят курс на негласную встречную блокировку.


2. Блокировка осуществляется в корпоративных интересах частных компаний и сайтов, для которых YouTube является прямым конкурентом - RuTube, Vk Видео, Платформа.



Помимо YouTube, под незаконную блокировку часто попадают сайты, которые находятся на хостинг-площадках, где располагаются и блокируемые сайты. Это происходит из-за блокировки больших диапазонов IP, которые захватывают и совершенно непричастные к нарушениям сайты. Пример такого сайта - сайт core.tcl.tk с GUI-библиотекой Tcl/Tk. Чем она помешала Роскомнадзору - совершенно непонятно.





* * *



По вышеуказанным причинам, необходимо уметь получать заданный файл с сайта даже если сайт находится под блокировкой. Идея в том, что при ограничении на 16Кб, можно автоматически конструировать повторные Retry-запросы, в которых будет указано смещение позиции, с которой надо начать загрузку. Таким образом можно скачать файл по-частям, причем длинна кусков будет ограничена тем значением, которое установил Роскомнадзор (больше, чем дает РКН, кусок все равно не получится). Недостаток этого метода состоит в том, что не все веб-серверы настроены на возможность докачки файлов.


Команда для выкачивания файла через curl выглядит следующим образом:



curl -LOR -C - --retry 1000 --retry-delay 0.1 -y 1 -Y 1 <URL>



Здесь опция -C обозначает докачку, а в опции --retry указывается число попыток. Этот метод будет работать не быстро, но файл должен в конце концов скачаться.


По непроверенной информации данный метод может в любой момент перестать работать, так как РКН все время меняет механизм блокировки. Опция --retry не рвёт сессию, а лимит 16Kb РКН может применяеть ко всем попыткам вместе.


Поэтому может сработать другой метод, с разрывом сессии на каждый скачиваемый кусок:



while : ; do curl -LOR -C - --max-time 0.2 <URL> && break ; done



Время --max-time нужно подбирать исходя из качества связи. При 0.1 curl может не успеваеть соединиться, а при 1, 2 и больше - будет большую часть времени простаивать, что неэффективно. При это иногда и при больших значениях curl тоже не успевает подключиться. То есть, время ожидания соединения надо подбирать.


А можно использовать wget без цикла, вот так:



wget --read-timeout=2 -c <URL>



Этот вариант, в случае остановки скачивания, будет сам ждать 2 секунды, и запросит от сервера продолжение закачки. Вот как выглядит лог выкачивания GUI-библиотеки Tcl/Tk:



> wget --read-timeout=2 -c https://core.tcl.tk/tcltls/uv/tcltls-1.7.22.tar.gz

Распознаётся core.tcl.tk (core.tcl.tk)… 104.16.74.106, 104.16.75.106, 2606:4700::6810:4a6a, ...

Подключение к core.tcl.tk (core.tcl.tk)|104.16.74.106|:443... соединение установлено.

HTTP-запрос отправлен. Ожидание ответа… 302 Moved Temporarily

Адрес: https://core.tcl-lang.org/tcltls/uv/tcltls-1.7.22.tar.gz [переход]

--2026-01-19 12:30:08-- https://core.tcl-lang.org/tcltls/uv/tcltls-1.7.22.tar.gz

Распознаётся core.tcl-lang.org (core.tcl-lang.org)… 104.19.243.68, 104.19.242.68, 2606:4700::6813:f244, ...

Подключение к core.tcl-lang.org (core.tcl-lang.org)|104.19.243.68|:443... соединение установлено.

HTTP-запрос отправлен. Ожидание ответа… 206 Partial Content

Длина: 165206 (161K), 148037 (145K) осталось [application/x-gzip]

Сохранение в: «tcltls-1.7.22.tar.gz»


tcltls-1.7.22.tar.gz 20%[++++===> ] 32,79K --.-KB/s за 2,0s


2026-01-19 12:30:11 (8,01 KB/s) - Ошибка чтения, позиция 33575/165206 (Время ожидания соединения истекло). Повтор.


--2026-01-19 12:30:12-- (попытка: 2) https://core.tcl-lang.org/tcltls/uv/tcltls-1.7.22.tar.gz

Подключение к core.tcl-lang.org (core.tcl-lang.org)|104.19.243.68|:443... соединение установлено.

HTTP-запрос отправлен. Ожидание ответа… 206 Partial Content

Длина: 165206 (161K), 131631 (129K) осталось [application/x-gzip]

Сохранение в: «tcltls-1.7.22.tar.gz»


tcltls-1.7.22.tar.gz 31%[++++++++====> ] 50,86K --.-KB/s за 2,0s


2026-01-19 12:30:15 (9,03 KB/s) - Ошибка чтения, позиция 52080/165206 (Время ожидания соединения истекло). Повтор.


--2026-01-19 12:30:17-- (попытка: 3) https://core.tcl-lang.org/tcltls/uv/tcltls-1.7.22.tar.gz

Подключение к core.tcl-lang.org (core.tcl-lang.org)|104.19.243.68|:443... соединение установлено.

...



Видно, что файл библиотеки медленно, но верно, выкачивается кусками по 16...18 Кб.


Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования