{"id":443601,"date":"2024-12-27T03:04:12","date_gmt":"2024-12-27T03:04:12","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=443601"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=443601","title":{"rendered":"<span>\u041e\u0431\u0432\u0438\u0432\u0430\u0435\u043c YouTube \u0437\u043c\u0435\u0435\u043c, \u0438\u043b\u0438 \u043a\u0430\u043a \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0441 YouTube \u0431\u0435\u0437 VPN \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Python-\u0435. \u0427\u0430\u0441\u0442\u044c 1<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043c\u0438\u0440 \u043f\u0440\u0435\u0441\u044b\u0449\u0435\u043d \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u0438 \u0432 \u043d\u0430\u0448\u0435 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0435\u0451 \u0432\u0430\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c. \u041c\u043d\u043e\u0433\u0438\u0435 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u0432 \u043d\u0430 YouTube, \u043a\u0440\u043e\u043c\u0435 \u043c\u0443\u0441\u043e\u0440\u0430, \u043a\u043e\u0442\u0438\u043a\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0447\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c) \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043f\u043e \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0442\u0435\u043c\u0430\u043c. \u0418 \u0438\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0447\u0438\u0432\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0439 \u0432 \u043c\u0438\u0440\u0435.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e (1 \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438), \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u044b \u0438 \u0446\u0435\u043b\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u0441 YouTube (2 \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438) \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f VPN \u0438 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Python-\u0435. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430: VPN \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f, \u043d\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c &#171;\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c \u0438 \u0438\u0437\u043d\u043e\u0448\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Google_Global_Cache\" rel=\"noopener noreferrer nofollow\">Google Global Cache<\/a>&#187; (\u0432\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u043e \u0447\u0451\u043c \u044f). \u042f \u0434\u0443\u043c\u0430\u044e \u044d\u0442\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u043e\u0441\u0441\u0438\u044f\u043d YouTube \u043f\u043e\u0447\u0442\u0438 \u0438\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<hr\/>\n<h4>\u0417\u0430\u0447\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 Python?<\/h4>\n<ol>\n<li>\n<p>\u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044e \u043d\u0430 Python, \u0438 \u043e \u0447\u0451\u043c \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0435 \u043e \u043d\u0451\u043c?<\/p>\n<\/li>\n<li>\n<p>\u0423 python \u0435\u0441\u0442\u044c \u0448\u0438\u0440\u043e\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043a\u0430\u043a yt-dlp \u0438 youtube-dl, \u043d\u043e \u043e\u043d\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u0447\u0442\u043e-\u0442\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c. \u0422\u043e\u043d\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0446\u0435\u043b\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430, \u0432\u0435\u0449\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0433\u0435\u043c\u043e\u0440\u0440\u043e\u0439\u043d\u0430\u044f (\u0435\u0441\u043b\u0438, \u043d\u0435\u0442 &#8212; \u043f\u043e\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043c\u0435\u043d\u044f), \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0433\u0443\u0433\u043b\u0438\u0442\u044c \u0438 \u0437\u043d\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u0430\u0439\u0442\u044b, \u043d\u043e \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u043d\u0438 \u0438\u043b\u0438 \u043f\u043b\u0430\u0442\u043d\u044b\u0435, \u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0447\u043a\u0430\u043d\u044b \u0440\u0435\u043a\u043b\u0430\u043c\u043e\u0439, \u0438\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432\u0441\u0451 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0443 \u0438 \u043f\u043e-\u043c\u043e\u0435\u043c\u0443, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043b\u044e\u0431\u043e\u0439 \u043d\u0430\u0432\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u0434\u0430 \u0438 \u0433\u043b\u0430\u0437 \u0440\u0430\u0434\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435)<\/p>\n<\/li>\n<\/ol>\n<h2>\u042d\u0442\u0430\u043f 1. \u041e\u0431\u0445\u043e\u0434\u0438\u043c \u0431\u043b\u043e\u043a\u2026 \u043e\u0439!.. \u0420\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c \u0438 \u0438\u0437\u043d\u043e\u0448\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<\/h2>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 YouTube \u0443 \u043d\u0430\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0430\u0434\u043e? \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0435 \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0432 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438, \u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0430\u043a\u0443\u044e \u0437\u043b\u043e\u0432\u0440\u0435\u0434\u043d\u0443\u044e (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435) \u0432\u0435\u0449\u044c, \u043a\u0430\u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Deep_packet_inspection\" rel=\"noopener noreferrer nofollow\">DPI<\/a> (\u0430\u043d\u0433\u043b. Deep Packet Inspection \u00ab\u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u00bb)<\/p>\n<h3>How it works<\/h3>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e DPI \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0443, DPI \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0430\u043c HTTP 302 Redirect, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0432\u0435\u0431-\u0441\u0430\u0439\u0442 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0435\u0441\u044c. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0431\u0440\u0430\u043d\u0434\u043c\u0430\u0443\u044d\u0440\u043e\u0432, Deep Packet Inspection \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043d\u043e \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c \u0438 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0440\u0433\u0430\u043d\u0430\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c, \u0432\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u0432\u0442\u043e\u0440\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u0442\u044c \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u0432\u0438\u0440\u0443\u0441\u043e\u0432. <\/p>\n<p>\u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u043e\u0433\u043e DPI, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0446\u0435\u043b\u044c\u044e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u043e\u0439, \u0434\u0430 \u0438 \u044f, \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c, \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u0432 \u044d\u0442\u043e\u043c, \u0442\u043e \u0434\u0443\u043c\u0430\u044e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0415\u0441\u043b\u0438 \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Deep_packet_inspection\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/111054\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h3>\u0427\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c<\/h3>\n<p>\u041d\u043e, \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043e\u043b\u0442 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u044f \u0433\u0430\u0439\u043a\u0430, \u0438 \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u0432\u0435\u0449\u044c (\u0445\u043e\u0442\u044f \u043e\u043d\u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442). \u041c\u043d\u043e\u0433\u0438\u0435 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043f\u0440\u043e <a href=\"https:\/\/github.com\/ValdikSS\/GoodbyeDPI\" rel=\"noopener noreferrer nofollow\">GoodbyeDPI<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/github.com\/bol-van\/zapret\" rel=\"noopener noreferrer nofollow\">zapret<\/a>. \u042d\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043d\u043e \u0440\u0430\u0437 \u0443\u0436 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e Python, \u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u043d\u0430 Python. \u041f\u043e\u0438\u0441\u043a\u0430\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u044f \u043d\u0430\u0448\u0435\u043b <a href=\"https:\/\/github.com\/theo0x0\/nodpi\" rel=\"noopener noreferrer nofollow\">nodpi<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e python. <\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>nodpi \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440 (socket), \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0433\u043e\u043d\u0438\u043c \u0442\u0440\u0430\u0444\u0438\u043a. \u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043e\u043d \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u0431\u0438\u0432\u0430\u044f \u0441 \u0442\u043e\u043b\u043a\u0443 DPI.<\/p>\n<h4>\u041f\u043b\u044e\u0441\u044b<\/h4>\n<ol>\n<li>\n<p>\u042d\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0430 Python!<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e, \u0434\u0451\u0448\u0435\u0432\u043e, \u0441\u0435\u0440\u0434\u0438\u0442\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430, \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443 GoodbyeDPI <\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u043d\u0435 \u0433\u043d\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0432\u0435\u0441\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<\/li>\n<\/ol>\n<h4>\u041c\u0438\u043d\u0443\u0441\u044b<\/h4>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 &#8212; \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f \u043d\u0435 \u0434\u0430\u0451\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f TCP<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0435\u0441\u043b\u0438 \u0441\u0430\u0439\u0442 \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u043f\u043e IP<\/p>\n<\/li>\n<\/ol>\n<h3>\u041f\u0438\u0448\u0435\u043c&#8230;, \u043d\u0435\u0442 &#8212; \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u0434<\/h3>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u0440\u0435\u0436\u043d\u043e, \u0441\u043b\u043e\u0432\u043d\u043e \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u043b\u0438\u043f\u0430\u043b\u0438\u0441\u044c \u0433\u043b\u0430\u0437\u0430 \u0438 \u043e\u043d \u0437\u0430\u043b\u0438\u043b \u043a\u043e\u0434 \u043f\u0440\u044f\u043c\u043e \u0442\u0430\u043a, \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044f\u0441\u044c, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u0447\u0451\u0441\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442. <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <code>blacklist.txt<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0443\u0434\u0430 \u0434\u043e\u043c\u0435\u043d\u044b, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0442\u0438\u043c \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c. \u0414\u043b\u044f YouTube \u044d\u0442\u043e: <\/p>\n<pre><code>youtube.com youtu.be yt.be googlevideo.com ytimg.com ggpht.com gvt1.com youtube-nocookie.com youtube-ui.l.google.com youtubeembeddedplayer.googleapis.com youtube.googleapis.com youtubei.googleapis.com yt-video-upload.l.google.com wide-youtube.l.google.com<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b <code>nodpi.py<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434<\/p>\n<pre><code class=\"python\">import random import asyncio  BLOCKED = [line.rstrip().encode() for line in open('blacklist.txt', 'r', encoding='utf-8')] TASKS = []<\/code><\/pre>\n<p>\u0427\u0442\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0434\u0435\u043b\u0430\u0435\u043c:<\/p>\n<ol>\n<li>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u043f\u0438\u0441\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c <\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"python\">async def main(host, port):      server = await asyncio.start_server(new_conn, host, port)     await server.serve_forever() <\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 &#8212; \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u043a\u0435\u0442-\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435 \u0438 \u043f\u043e\u0440\u0442\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>new_conn<\/code> (\u043d\u0438\u0436\u0435) \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. <\/p>\n<pre><code class=\"python\">async def pipe(reader, writer):      while not reader.at_eof() and not writer.is_closing():         try:             writer.write(await reader.read(1500))             await writer.drain()         except:             break      writer.close() <\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 reader \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 writer \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043a\u043e\u043d\u0435\u0446 \u0438\u043b\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u043e.<\/p>\n<pre><code class=\"python\">async def new_conn(local_reader, local_writer):      http_data = await local_reader.read(1500)      try:         type, target = http_data.split(b\"\\r\\n\")[0].split(b\" \")[0:2]         host, port = target.split(b\":\")     except:         local_writer.close()         return      if type != b\"CONNECT\":         local_writer.close()         return      local_writer.write(b'HTTP\/1.1 200 OK\\n\\n')     await local_writer.drain()      try:         remote_reader, remote_writer = await asyncio.open_connection(host, port)     except:         local_writer.close()         return      if port == b'443':         await fragemtn_data(local_reader, remote_writer)      TASKS.append(asyncio.create_task(pipe(local_reader, remote_writer)))     TASKS.append(asyncio.create_task(pipe(remote_reader, local_writer))) <\/code><\/pre>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0442\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0435 CONNECT, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0442\u0432\u0435\u0442 HTTP\/1.1 200 OK \u043a\u043b\u0438\u0435\u043d\u0442\u0443.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0446\u0435\u043b\u0435\u0432\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0440\u0442 \u0440\u0430\u0432\u0435\u043d 443 (\u043f\u043e\u0440\u0442 HTTPS), \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>fragemtn_data<\/code> (\u043d\u0438\u0436\u0435)<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"python\">async def fragemtn_data(local_reader, remote_writer):      head = await local_reader.read(5)     data = await local_reader.read(1500)     parts = []      if all([data.find(site) == -1 for site in BLOCKED]):         remote_writer.write(head + data)         await remote_writer.drain()          return      while data:         part_len = random.randint(1, len(data))         parts.append(bytes.fromhex(\"1603\") + bytes([random.randint(0, 255)]) + int(             part_len).to_bytes(2, byteorder='big') + data[0:part_len])          data = data[part_len:]      remote_writer.write(b''.join(parts))     await remote_writer.drain() <\/code><\/pre>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0438\u0437 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0445 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u0431\u043e\u0439\u0442\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 DPI, \u0442\u0430\u043a \u043a\u0430\u043a \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"python\">asyncio.run(main(host='127.0.0.1', port=8881))<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c 127.0.0.1 \u0438 \u0441\u043b\u0443\u0448\u0430\u0435\u043c \u043f\u043e\u0440\u0442 8881<\/p>\n<p>\u0412\u0441\u0451, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f!<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 Firefox, \u0442\u043e \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u2192 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0442\u0438 \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c IP \u0438 \u043f\u043e\u0440\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ebc\/6c8\/522\/ebc6c852207e97514b24f360d4da8095.png\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 Firefox\" title=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 Firefox\" width=\"1600\" height=\"718\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ebc\/6c8\/522\/ebc6c852207e97514b24f360d4da8095.png\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 Firefox<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c YouTube \u0438 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<span class=\"habrahidden\"> \u0438\u043b\u0438\u00a0\u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \ud83d\ude42<\/span><\/p>\n<h2>\u042d\u0442\u0430\u043f 2. \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c!<\/h2>\n<h3>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 pytubefix \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>pip install pytubefix<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e pytubefix<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/github.com\/JuanBindez\/pytubefix\" rel=\"noopener noreferrer nofollow\">pytubefix<\/a> &#8212; \u044d\u0442\u043e \u043c\u043e\u0449\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 python \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0441 YouTube \u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e, \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u043e\u0432 \u0438 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c cli. \u0421\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043e\u043d\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043a\u043e\u043c <a href=\"https:\/\/github.com\/pytube\/pytube\/\" rel=\"noopener noreferrer nofollow\">pytube<\/a>, \u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 pytube \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, \u0438 \u0432 \u0430\u0432\u0433\u0443\u0441\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430, \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 api YouTube \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0422\u0430\u043a\u0436\u0435 \u0432 pytubefix \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u0435\u0434\u043e\u0447\u0435\u0442\u044b \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u0446\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. pytubefix, \u043a\u0430\u043a \u0438 pytube, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 api youtube, \u0430 \u043a\u043e\u0435-\u0433\u0434\u0435 \u0438 \u043f\u0430\u0440\u0441\u0438\u0442\u00a0\u0435\u0433\u043e html\/json. <\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f ffmpeg, \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e (\u0435\u0441\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435). \u041f\u043e\u0447\u0435\u043c\u0443? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e YouTube \u0434\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e \u0441 \u0430\u0443\u0434\u0438\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 360p (\u0440\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b\u043e 720p), \u0438 \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 1080p, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0432 1080p, \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0430\u0443\u0434\u0438\u043e, \u0438 \u0437\u0430\u0442\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u043e\u043c. ffmpeg \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0434\u043b\u044f Windows. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u043c\u043e\u0435\u0433\u043e <a href=\"https:\/\/drive.google.com\/file\/d\/12flZfkV3dKQWPy8mPYfsABttgR-3w1yZ\/view?usp=drive_link\" rel=\"noopener noreferrer nofollow\">Google \u0414\u0438\u0441\u043a\u0430<\/a>, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0435\u0435 \u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435.<\/p>\n<h3>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0434\u0435\u043e <\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0438\u0434\u0435\u043e. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b <code>yt_downloader.py<\/code> \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432 \u043d\u0435\u0433\u043e \u043a\u043e\u0434: <\/p>\n<pre><code class=\"python\">from pytubefix import YouTube from pytubefix.cli import on_progress  url = \"https:\/\/www.youtube.com\/watch?v=xxxxxxxxxxx\"  video = YouTube(     proxies={\"http\": \"http:\/\/127.0.0.1:8881\",              \"https\": \"http:\/\/127.0.0.1:8881\"},     url=url,     on_progress_callback=on_progress, )  print('Title:', yt.title)  stream = video.streams.get_highest_resolution() stream.download() <\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u0430\u0441\u0441 YouTube, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0438\u0434\u0435\u043e, \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>on_progress<\/code>. \u041e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0431\u0430\u0440 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0442\u0430\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435? \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e-callback. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b <code>(stream: Stream, chunk: bytes, bytes_remaining: int)<\/code><\/p>\n<p>\u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>url<\/code> \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0432\u043e\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0437\u0430\u043c\u0435\u043d\u0438\u043b id \u0432\u0438\u0434\u0435\u043e \u0438\u043a\u0441\u0430\u043c\u0438. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 YouTube \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0435\u043c\u0443 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, url \u0438 callback. \u0412\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u0440\u043e\u043c\u0435 url \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e callback \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0447\u0430\u043d\u043a\u0430 (pytubefix \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e \u043a\u0443\u0441\u043a\u0430\u043c\u0438 &#8212; \u0447\u0430\u043d\u043a\u0430\u043c\u0438).<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435) \u0432\u0438\u0434\u0435\u043e. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0434\u0430\u0442\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0434\u043b\u0438\u043d\u0443 \u0432\u0438\u0434\u0435\u043e (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445), \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432 \u0438 \u0430\u0432\u0442\u043e\u0440\u0430. \u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>stream.filesize<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. <\/p>\n<p>\u0412 \u0441\u0442\u0440\u043e\u043a\u0435 <code>stream = video.streams.get_highest_resolution()<\/code> \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u043f\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044e (\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443) \u0432\u0438\u0434\u0435\u043e. \u0422\u0443\u0442 \u044f \u0445\u043e\u0447\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e \u043d\u0430 YouTube \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0434\u043d\u043e \u0432\u0438\u0434\u0435\u043e, \u043e\u0434\u043d\u043e \u0430\u0443\u0434\u0438\u043e \u0438\u043b\u0438 \u0432\u0441\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445, \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430\u0445 \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435. \u0422\u0430\u043a, \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0432\u0438\u0434\u0435\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e, \u0434\u043b\u0438\u043d\u043d\u0430\u044f \u043f\u043e\u0440\u0442\u044f\u043d\u043a\u0430!<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>[     {         \"itag\": 18,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"360p\",         \"vcodec\": \"avc1.42001E\",         \"acodec\": \"mp4a.40.2\",         \"progressive\": True,         \"type\": \"video\",     },     {         \"itag\": 315,         \"mime_type\": \"video\/webm\",         \"resolution\": \"2160p\",         \"vcodec\": \"vp9\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 337,         \"mime_type\": \"video\/webm\",         \"resolution\": \"2160p\",         \"vcodec\": \"vp9.2\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 701,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"2160p\",         \"vcodec\": \"av01.0.13M.10.0.110.09.18.09.0\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 308,         \"mime_type\": \"video\/webm\",         \"resolution\": \"1440p\",         \"vcodec\": \"vp9\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 336,         \"mime_type\": \"video\/webm\",         \"resolution\": \"1440p\",         \"vcodec\": \"vp9.2\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 700,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"1440p\",         \"vcodec\": \"av01.0.12M.10.0.110.09.18.09.0\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 299,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"1080p\",         \"vcodec\": \"avc1.64002a\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 303,         \"mime_type\": \"video\/webm\",         \"resolution\": \"1080p\",         \"vcodec\": \"vp9\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 335,         \"mime_type\": \"video\/webm\",         \"resolution\": \"1080p\",         \"vcodec\": \"vp9.2\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 699,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"1080p\",         \"vcodec\": \"av01.0.09M.10.0.110.09.18.09.0\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 298,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"720p\",         \"vcodec\": \"avc1.4d4020\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 302,         \"mime_type\": \"video\/webm\",         \"resolution\": \"720p\",         \"vcodec\": \"vp9\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 334,         \"mime_type\": \"video\/webm\",         \"resolution\": \"720p\",         \"vcodec\": \"vp9.2\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 698,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"720p\",         \"vcodec\": \"av01.0.08M.10.0.110.09.18.09.0\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 135,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"480p\",         \"vcodec\": \"avc1.4d401f\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 244,         \"mime_type\": \"video\/webm\",         \"resolution\": \"480p\",         \"vcodec\": \"vp9\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 333,         \"mime_type\": \"video\/webm\",         \"resolution\": \"480p\",         \"vcodec\": \"vp9.2\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 697,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"480p\",         \"vcodec\": \"av01.0.05M.10.0.110.09.18.09.0\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 134,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"360p\",         \"vcodec\": \"avc1.4d401e\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 243,         \"mime_type\": \"video\/webm\",         \"resolution\": \"360p\",         \"vcodec\": \"vp9\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 332,         \"mime_type\": \"video\/webm\",         \"resolution\": \"360p\",         \"vcodec\": \"vp9.2\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 696,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"360p\",         \"vcodec\": \"av01.0.04M.10.0.110.09.18.09.0\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 133,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"240p\",         \"vcodec\": \"avc1.4d4015\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 242,         \"mime_type\": \"video\/webm\",         \"resolution\": \"240p\",         \"vcodec\": \"vp9\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 331,         \"mime_type\": \"video\/webm\",         \"resolution\": \"240p\",         \"vcodec\": \"vp9.2\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 695,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"240p\",         \"vcodec\": \"av01.0.01M.10.0.110.09.18.09.0\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 160,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"144p\",         \"vcodec\": \"avc1.4d400c\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 278,         \"mime_type\": \"video\/webm\",         \"resolution\": \"144p\",         \"vcodec\": \"vp9\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 330,         \"mime_type\": \"video\/webm\",         \"resolution\": \"144p\",         \"vcodec\": \"vp9.2\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 694,         \"mime_type\": \"video\/mp4\",         \"resolution\": \"144p\",         \"vcodec\": \"av01.0.00M.10.0.110.09.18.09.0\",         \"acodec\": None,         \"progressive\": False,         \"type\": \"video\",     },     {         \"itag\": 139,         \"mime_type\": \"audio\/mp4\",         \"resolution\": None,         \"vcodec\": None,         \"acodec\": \"mp4a.40.5\",         \"progressive\": False,         \"type\": \"audio\",     },     {         \"itag\": 140,         \"mime_type\": \"audio\/mp4\",         \"resolution\": None,         \"vcodec\": None,         \"acodec\": \"mp4a.40.2\",         \"progressive\": False,         \"type\": \"audio\",     },     {         \"itag\": 249,         \"mime_type\": \"audio\/webm\",         \"resolution\": None,         \"vcodec\": None,         \"acodec\": \"opus\",         \"progressive\": False,         \"type\": \"audio\",     },     {         \"itag\": 250,         \"mime_type\": \"audio\/webm\",         \"resolution\": None,         \"vcodec\": None,         \"acodec\": \"opus\",         \"progressive\": False,         \"type\": \"audio\",     },     {         \"itag\": 251,         \"mime_type\": \"audio\/webm\",         \"resolution\": None,         \"vcodec\": None,         \"acodec\": \"opus\",         \"progressive\": False,         \"type\": \"audio\",     }, ] <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u0438\u0434\u0435\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0432\u0435\u0434\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d <code>print(video.streams)<\/code>, \u043d\u043e \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0438\u0445 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e <code>get_highest_resolution()<\/code>. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0441 \u0441\u0430\u043c\u044b\u043c \u043b\u0443\u0447\u0448\u0438\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438 \u0430\u0443\u0434\u0438\u043e, \u0438 \u0432\u0438\u0434\u0435\u043e. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u043b, \u0442\u0430\u043a\u0438\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f 360p, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e YouTube \u0434\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e \u0441 \u0430\u0443\u0434\u0438\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 360p (\u0440\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b\u043e 720p), \u0438 \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 1080p, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0432 1080p, \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0430\u0443\u0434\u0438\u043e, \u0438 \u0437\u0430\u0442\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u043e\u043c. \u0421\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e \u0432 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435, \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0434\u043d\u0435\u0435.<\/p>\n<p>\u041d\u0443 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 <code>stream.download()<\/code> \u043c\u044b \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0438\u0434\u0435\u043e. \u041f\u0440\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0431\u0430\u0440, \u0438 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. <strong>\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 DPI!<\/strong><\/p>\n<h3>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0438\u0434\u0435\u043e \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438<\/h3>\n<p>\u0412\u0438\u0434\u0435\u043e \u0432 360p, \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435\u00a0\u043e\u0447\u0435\u043d\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043c \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0415\u0441\u043b\u0438 \u0432\u044b \u0435\u0449\u0435 \u043d\u0435 \u0441\u043a\u0430\u0447\u0430\u043b\u0438 ffmpeg, \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u044d\u0442\u043e. \u0411\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e ffmpeg \u043b\u0435\u0436\u0438\u0442 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u0430\u043f\u043a\u0435, \u0447\u0442\u043e \u0438 \u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b <code>yt_downloader_2.py<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043d\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"python\">import os  from pytubefix import YouTube from pytubefix.cli import on_progress  url = \"https:\/\/www.youtube.com\/watch?v=xxxxxxxxxxx\"   def combine(audio: str, video: str, output: str) -&gt; None:      if os.path.exists(output):         os.remove(output)      code = os.system(         f'.\\\\ffmpeg.exe -i \"{video}\" -i \"{audio}\" -c copy \"{output}\"')      if code != 0:         raise SystemError(code)   def download(url: str):      yt = YouTube(         proxies={\"http\": \"http:\/\/127.0.0.1:8881\",                  \"https\": \"http:\/\/127.0.0.1:8881\"},         url=url,         on_progress_callback=on_progress,     )      video_stream = yt.streams.\\         filter(type='video').\\         order_by('resolution').\\         desc().first()      audio_stream = yt.streams.\\         filter(mime_type='audio\/mp4').\\         order_by('filesize').\\         desc().first()      print('Information:')     print(\"\\tTitle:\", yt.title)     print(\"\\tAuthor:\", yt.author)     print(\"\\tDate:\", yt.publish_date)     print(\"\\tResolution:\", video_stream.resolution)     print(\"\\tViews:\", yt.views)     print(\"\\tLength:\", round(yt.length\/60), \"minutes\")     print(\"\\tFilename of the video:\", video_stream.default_filename)     print(\"\\tFilesize of the video:\", round(         video_stream.filesize \/ 1000000), \"MB\")      print('Download video...')     video_stream.download()     print('\\nDownload audio...')     audio_stream.download()      combine(audio_stream.default_filename, video_stream.default_filename,             f'{yt.title}.mp4')   download(url) <\/code><\/pre>\n<p>\u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c? \u041c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>combine<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0438 \u0430\u0443\u0434\u0438\u043e. \u041c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>.\\ffmpeg.exe -i \"filename_video\" -i \"filename_audio\" -c copy \"output_filename\"<\/code><\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u044b \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0438 \u0432\u0438\u0434\u0435\u043e \u0438 \u0430\u0443\u0434\u0438\u043e. \u0417\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u0435\u043e \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0443\u0434\u0438\u043e, \u043d\u043e \u0437\u0430\u0442\u043e \u043e\u043d\u043e \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e, \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u043e \u0442\u0438\u043f\u0443 (\u0432\u0438\u0434\u0435\u043e) <code>filter(type='video')<\/code>,\u00a0 \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044e, \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u0431\u0435\u0440\u0451\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441 \u0430\u0443\u0434\u0438\u043e. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435\u043e \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ffmpeg. \u041d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e!<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 DPI \u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f (\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 url \u043d\u0430 \u0441\u0432\u043e\u0439). \u0413\u043e\u0442\u043e\u0432\u043e! <\/p>\n<h3>\u041a\u0430\u043a \u0443\u0437\u043d\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u0438\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"python\">def resolutions(video: YouTube):      res = []      streams = self.video.streams.\\                     filter(type='video').\\                     order_by('resolution').\\                     desc()      for stream in streams:         if stream.resolution not in res:             res.append(stream.resolution)      return res       <\/code><\/pre>\n<p>\u041f\u043e\u0442\u043e\u043a \u0441 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">res = '1080p' # \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 stream = self.video.streams.\\           filter(resolution=res, progressive=False).desc().first()<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 ffmpeg, \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 <code>progressive=False<\/code> \u043d\u0430 <code>True<\/code> <\/p>\n<h3>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0430\u0443\u0434\u0438\u043e<\/h3>\n<p>\u0418\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b \u0432\u0438\u0434\u0435\u043b\u0438, \u043a\u0430\u043a \u043c\u044b \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043b\u0438 \u0430\u0443\u0434\u0438\u043e:<\/p>\n<pre><code class=\"python\">...  audio_stream = yt.streams.\\         filter(mime_type='audio\/mp4').\\         order_by('filesize').\\         desc().first()  audio_stream.download()<\/code><\/pre>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u0443\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u0430\u0443\u0434\u0438\u043e \u0431\u0443\u0434\u0435\u0442 m4a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0434\u0440\u0443\u0433\u043e\u0439, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f ffmpeg<\/p>\n<hr\/>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u044f \u0445\u043e\u0447\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 (\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0430\u044f \u0431\u0443\u0434\u0435\u0442) \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0435 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u044b, \u043a\u0430\u043d\u0430\u043b\u044b \u0438 \u0434\u0430\u0436\u0435 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044b \u0441 YouTube. <\/p>\n<h3>\u0418\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b <\/h3>\n<h4>\u041e\u0431\u0445\u043e\u0434 DPI \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <\/h4>\n<p>\u0414\u0430, \u0442\u0430\u043a\u043e\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041d\u043e \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0435 \u0422\u0422\u041a \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043c\u043e\u0433\u0443 \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 GoodbyeDPI. <\/p>\n<h4>Remote end closed connection  <\/h4>\n<p>\u0410 \u0432\u043e\u0442 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f. \u041e\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0438 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c YouTube \u0438 \u044f \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u043d\u0430 nodpi. \u0422\u043e \u043b\u0438 \u044e\u0442\u0443\u0431 \u0431\u0430\u043d\u0438\u0442 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u043b\u0438 \u0420\u041a\u041d \u0445\u0438\u043c\u0438\u0447\u0438\u0442, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0432 nodpi \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u042f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b. \u0415\u0441\u043b\u0438 \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0442\u043e\u043a\u0438, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0443\u0442, \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0438 \u043a\u0430\u043a \u043f\u043e\u0444\u0438\u043a\u0441\u0438\u0442\u044c)<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u043d\u0435 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0439\u0442\u0435 \u0435\u0451 \u0432 \u0434\u043e\u043b\u0433\u0438\u0439 \u044f\u0449\u0438\u043a, \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u043f\u043e\u0434 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0420\u041a\u041d<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/870110\/\"> https:\/\/habr.com\/ru\/articles\/870110\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043c\u0438\u0440 \u043f\u0440\u0435\u0441\u044b\u0449\u0435\u043d \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u0438 \u0432 \u043d\u0430\u0448\u0435 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0435\u0451 \u0432\u0430\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c. \u041c\u043d\u043e\u0433\u0438\u0435 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u0432 \u043d\u0430 YouTube, \u043a\u0440\u043e\u043c\u0435 \u043c\u0443\u0441\u043e\u0440\u0430, \u043a\u043e\u0442\u0438\u043a\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u0447\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c) \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043f\u043e \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0442\u0435\u043c\u0430\u043c. \u0418 \u0438\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0447\u0438\u0432\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0439 \u0432 \u043c\u0438\u0440\u0435.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e (1 \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438), \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u044b \u0438 \u0446\u0435\u043b\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u0441 YouTube (2 \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438) \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f VPN \u0438 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Python-\u0435. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430: VPN \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f, \u043d\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c &#171;\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c \u0438 \u0438\u0437\u043d\u043e\u0448\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Google_Global_Cache\" rel=\"noopener noreferrer nofollow\">Google Global Cache<\/a>&#187; (\u0432\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u043e \u0447\u0451\u043c \u044f). \u042f \u0434\u0443\u043c\u0430\u044e \u044d\u0442\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u043e\u0441\u0441\u0438\u044f\u043d YouTube \u043f\u043e\u0447\u0442\u0438 \u0438\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<hr\/>\n<h4>\u0417\u0430\u0447\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 Python?<\/h4>\n<ol>\n<li>\n<p>\u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044e \u043d\u0430 Python, \u0438 \u043e \u0447\u0451\u043c \u043c\u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0435 \u043e \u043d\u0451\u043c?<\/p>\n<\/li>\n<li>\n<p>\u0423 python \u0435\u0441\u0442\u044c \u0448\u0438\u0440\u043e\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043a\u0430\u043a yt-dlp \u0438 youtube-dl, \u043d\u043e \u043e\u043d\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u0447\u0442\u043e-\u0442\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c. \u0422\u043e\u043d\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0446\u0435\u043b\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430, \u0432\u0435\u0449\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0433\u0435\u043c\u043e\u0440\u0440\u043e\u0439\u043d\u0430\u044f (\u0435\u0441\u043b\u0438, \u043d\u0435\u0442 &#8212; \u043f\u043e\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043c\u0435\u043d\u044f), \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0433\u0443\u0433\u043b\u0438\u0442\u044c \u0438 \u0437\u043d\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u0430\u0439\u0442\u044b, \u043d\u043e \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u043d\u0438 \u0438\u043b\u0438 \u043f\u043b\u0430\u0442\u043d\u044b\u0435, \u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0447\u043a\u0430\u043d\u044b \u0440\u0435\u043a\u043b\u0430\u043c\u043e\u0439, \u0438\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432\u0441\u0451 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0443 \u0438 \u043f\u043e-\u043c\u043e\u0435\u043c\u0443, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043b\u044e\u0431\u043e\u0439 \u043d\u0430\u0432\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u0434\u0430 \u0438 \u0433\u043b\u0430\u0437 \u0440\u0430\u0434\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435)<\/p>\n<\/li>\n<\/ol>\n<h2>\u042d\u0442\u0430\u043f 1. \u041e\u0431\u0445\u043e\u0434\u0438\u043c \u0431\u043b\u043e\u043a\u2026 \u043e\u0439!.. \u0420\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c \u0438 \u0438\u0437\u043d\u043e\u0448\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<\/h2>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 YouTube \u0443 \u043d\u0430\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0430\u0434\u043e? \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0435 \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0432 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438, \u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0430\u043a\u0443\u044e \u0437\u043b\u043e\u0432\u0440\u0435\u0434\u043d\u0443\u044e (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435) \u0432\u0435\u0449\u044c, \u043a\u0430\u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Deep_packet_inspection\" rel=\"noopener noreferrer nofollow\">DPI<\/a> (\u0430\u043d\u0433\u043b. Deep Packet Inspection \u00ab\u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u0438\u043d\u0441\u043f\u0435\u043a\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u00bb)<\/p>\n<h3>How it works<\/h3>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e DPI \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0443, DPI \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0430\u043c HTTP 302 Redirect, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0432\u0435\u0431-\u0441\u0430\u0439\u0442 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0435\u0441\u044c. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0431\u0440\u0430\u043d\u0434\u043c\u0430\u0443\u044d\u0440\u043e\u0432, Deep Packet Inspection \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043d\u043e \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c \u0438 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0440\u0433\u0430\u043d\u0430\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c, \u0432\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u0432\u0442\u043e\u0440\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0435\u0442\u044c \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u0432\u0438\u0440\u0443\u0441\u043e\u0432. <\/p>\n<p>\u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u043e\u0433\u043e DPI, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0446\u0435\u043b\u044c\u044e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u043e\u0439, \u0434\u0430 \u0438 \u044f, \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c, \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u0432 \u044d\u0442\u043e\u043c, \u0442\u043e \u0434\u0443\u043c\u0430\u044e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0415\u0441\u043b\u0438 \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Deep_packet_inspection\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/111054\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h3>\u0427\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c<\/h3>\n<p>\u041d\u043e, \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043e\u043b\u0442 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u044f \u0433\u0430\u0439\u043a\u0430, \u0438 \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u0432\u0435\u0449\u044c (\u0445\u043e\u0442\u044f \u043e\u043d\u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442). \u041c\u043d\u043e\u0433\u0438\u0435 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043f\u0440\u043e <a href=\"https:\/\/github.com\/ValdikSS\/GoodbyeDPI\" rel=\"noopener noreferrer nofollow\">GoodbyeDPI<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/github.com\/bol-van\/zapret\" rel=\"noopener noreferrer nofollow\">zapret<\/a>. \u042d\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043d\u043e \u0440\u0430\u0437 \u0443\u0436 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e Python, \u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u043d\u0430 Python. \u041f\u043e\u0438\u0441\u043a\u0430\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u044f \u043d\u0430\u0448\u0435\u043b <a href=\"https:\/\/github.com\/theo0x0\/nodpi\" rel=\"noopener noreferrer nofollow\">nodpi<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e python. <\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>nodpi \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440 (socket), \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0433\u043e\u043d\u0438\u043c \u0442\u0440\u0430\u0444\u0438\u043a. \u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043e\u043d \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u0431\u0438\u0432\u0430\u044f \u0441 \u0442\u043e\u043b\u043a\u0443 DPI.<\/p>\n<h4>\u041f\u043b\u044e\u0441\u044b<\/h4>\n<ol>\n<li>\n<p>\u042d\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0430 Python!<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e, \u0434\u0451\u0448\u0435\u0432\u043e, \u0441\u0435\u0440\u0434\u0438\u0442\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430, \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443 GoodbyeDPI <\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u043d\u0435 \u0433\u043d\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0432\u0435\u0441\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<\/li>\n<\/ol>\n<h4>\u041c\u0438\u043d\u0443\u0441\u044b<\/h4>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 &#8212; \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f \u043d\u0435 \u0434\u0430\u0451\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f TCP<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0435\u0441\u043b\u0438 \u0441\u0430\u0439\u0442 \u0437\u0430\u0431\u0430\u043d\u0435\u043d \u043f\u043e IP<\/p>\n<\/li>\n<\/ol>\n<h3>\u041f\u0438\u0448\u0435\u043c&#8230;, \u043d\u0435\u0442 &#8212; \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u0434<\/h3>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u0440\u0435\u0436\u043d\u043e, \u0441\u043b\u043e\u0432\u043d\u043e \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u043b\u0438\u043f\u0430\u043b\u0438\u0441\u044c \u0433\u043b\u0430\u0437\u0430 \u0438 \u043e\u043d \u0437\u0430\u043b\u0438\u043b \u043a\u043e\u0434 \u043f\u0440\u044f\u043c\u043e \u0442\u0430\u043a, \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044f\u0441\u044c, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u0447\u0451\u0441\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442. <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <code>blacklist.txt<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0443\u0434\u0430 \u0434\u043e\u043c\u0435\u043d\u044b, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0442\u0438\u043c \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c. \u0414\u043b\u044f YouTube \u044d\u0442\u043e: <\/p>\n<pre><code>youtube.com youtu.be yt.be googlevideo.com ytimg.com ggpht.com gvt1.com youtube-nocookie.com youtube-ui.l.google.com youtubeembeddedplayer.googleapis.com youtube.googleapis.com youtubei.googleapis.com yt-video-upload.l.google.com wide-youtube.l.google.com<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b <code>nodpi.py<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434<\/p>\n<pre><code class=\"python\">import random import asyncio  BLOCKED = [line.rstrip().encode() for line in open('blacklist.txt', 'r', encoding='utf-8')] TASKS = []<\/code><\/pre>\n<p>\u0427\u0442\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0434\u0435\u043b\u0430\u0435\u043c:<\/p>\n<ol>\n<li>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u043f\u0438\u0441\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c <\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"python\">async def main(host, port):      server = await asyncio.start_server(new_conn, host, port)     await server.serve_forever() <\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 &#8212; \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u043a\u0435\u0442-\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435 \u0438 \u043f\u043e\u0440\u0442\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>new_conn<\/code> (\u043d\u0438\u0436\u0435) \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. <\/p>\n<pre><code class=\"python\">async def pipe(reader, writer):      while not reader.at_eof() and not writer.is_closing():         try:             writer.write(await reader.read(1500))             await writer.drain()         except:             break      writer.close() <\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 reader \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 writer \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043a\u043e\u043d\u0435\u0446 \u0438\u043b\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u043e.<\/p>\n<pre><code class=\"python\">async def new_conn(local_reader, local_writer):      http_data = await local_reader.read(1500)      try:         type, target = http_data.split(b\"\\r\\n\")[0].split(b\" \")[0:2]         host, port = target.split(b\":\")     except:         local_writer.close()         return      if type != b\"CONNECT\":         local_writer.close()         return      local_writer.write(b'HTTP\/1.1 200 OK\\n\\n')     await local_writer.drain()      try:         remote_reader, remote_writer = await asyncio.open_connection(host, port)     except:         local_writer.close()         return      if port == b'443':         await fragemtn_data(local_reader, remote_writer)      TASKS.append(asyncio.create_task(pipe(local_reader, remote_writer)))     TASKS.append(asyncio.create_task(pipe(remote_reader, local_writer))) <\/code><\/pre>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0442\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0438\u043f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0435 CONNECT, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0442\u0432\u0435\u0442 HTTP\/1.1 200 OK \u043a\u043b\u0438\u0435\u043d\u0442\u0443.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0446\u0435\u043b\u0435\u0432\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0440\u0442 \u0440\u0430\u0432\u0435\u043d 443 (\u043f\u043e\u0440\u0442 HTTPS), \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>fragemtn_data<\/code> (\u043d\u0438\u0436\u0435)<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"python\">async def fragemtn_data(local_reader, remote_writer):      head = await local_reader.read(5)     data = await local_reader.read(1500)     parts = []      if all([data.find(site) == -1 for site in BLOCKED]):         remote_writer.write(head + data)         await remote_writer.drain()          return      while data:         part_len = random.randint(1, len(data))         parts.append(bytes.fromhex(\"1603\") + bytes([random.randint(0, 255)]) + int(             part_len).to_bytes(2, byteorder='big') + data[0:part_len])          data = data[part_len:]      remote_writer.write(b''.join(parts))     await remote_writer.drain() <\/code><\/pre>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0438\u0437 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0445 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u0431\u043e\u0439\u0442\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 DPI, \u0442\u0430\u043a \u043a\u0430\u043a \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"python\">asyncio.run(main(host='127.0.0.1', port=8881))<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c 127.0.0.1 \u0438 \u0441\u043b\u0443\u0448\u0430\u0435\u043c \u043f\u043e\u0440\u0442 8881<\/p>\n<p>\u0412\u0441\u0451, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f!<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 Firefox, \u0442\u043e \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u2192 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0442\u0438 \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c IP \u0438 \u043f\u043e\u0440\u0442:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 Firefox<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c YouTube \u0438 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<span class=\"habrahidden\"> \u0438\u043b\u0438\u00a0\u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \ud83d\ude42<\/span><\/p>\n<h2>\u042d\u0442\u0430\u043f 2. \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c!<\/h2>\n<h3>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 pytubefix \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code>pip install pytubefix<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043e pytubefix<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/github.com\/JuanBindez\/pytubefix\" rel=\"noopener noreferrer nofollow\">pytubefix<\/a> &#8212; \u044d\u0442\u043e \u043c\u043e\u0449\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 python \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0441 YouTube \u0432\u0438\u0434\u0435\u043e, \u0430\u0443\u0434\u0438\u043e, \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u043e\u0432 \u0438 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c cli. \u0421\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043e\u043d\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043a\u043e\u043c <a href=\"https:\/\/github.com\/pytube\/pytube\/\" rel=\"noopener noreferrer nofollow\">pytube<\/a>, \u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 pytube \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, \u0438 \u0432 \u0430\u0432\u0433\u0443\u0441\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430, \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 api YouTube \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0422\u0430\u043a\u0436\u0435 \u0432 pytubefix \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u0435\u0434\u043e\u0447\u0435\u0442\u044b \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u0446\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. pytubefix, \u043a\u0430\u043a \u0438 pytube, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 api youtube, \u0430 \u043a\u043e\u0435-\u0433\u0434\u0435 \u0438 \u043f\u0430\u0440\u0441\u0438\u0442\u00a0\u0435\u0433\u043e html\/json. <\/p>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f ffmpeg, \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e (\u0435\u0441\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435). \u041f\u043e\u0447\u0435\u043c\u0443? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e YouTube \u0434\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e \u0441 \u0430\u0443\u0434\u0438\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 360p (\u0440\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b\u043e 720p), \u0438 \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 1080p, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0432 1080p, \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0430\u0443\u0434\u0438\u043e, \u0438 \u0437\u0430\u0442\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440\u043e\u043c. ffmpeg \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0434\u043b\u044f Windows. \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u043c\u043e\u0435\u0433\u043e <a href=\"https:\/\/drive.google.com\/file\/d\/12flZfkV3dKQWPy8mPYfsABttgR-3w1yZ\/view?usp=drive_link\" rel=\"noopener noreferrer nofollow\">Google \u0414\u0438\u0441\u043a\u0430<\/a>, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0435\u0435 \u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435.<\/p>\n<h3>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0434\u0435\u043e <\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0438\u0434\u0435\u043e. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b <code>yt_downloader.py<\/code> \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432 \u043d\u0435\u0433\u043e \u043a\u043e\u0434: <\/p>\n<pre><code class=\"python\">from pytubefix import YouTube from pytubefix.cli import on_progress  url = \"https:\/\/www.youtube.com\/watch?v=xxxxxxxxxxx\"  video = YouTube(     proxies={\"http\": \"http:\/\/127.0.0.1:8881\",              \"https\": \"http:\/\/127.0.0.1:8881\"},     url=url,     on_progress_callback=on_progress, )  print('Title:', yt.title)  stream = video.streams.get_highest_resolution() stream.download() <\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u0430\u0441\u0441 YouTube, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0438\u0434\u0435\u043e, \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>on_progress<\/code>. \u041e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0431\u0430\u0440 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0442\u0430\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435? \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e-callback. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b <code>(stream: Stream, chunk: bytes,<\/code><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-443601","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=443601"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443601\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=443601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=443601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=443601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}