Мне вот стало лень, и поэтому я решил написать свой маленький клиент. Для обхода блокировок я решил использовать google compression proxy. Интересная, хорошая и полезная штука — странно, что по её поводу на хабре не было статей. Забегая вперёд, сразу скажу, что всё получилось, и работающую версию можно попробовать на своём девайсе. Однако в процессе возникло много всяких интересных нюансов, которые любопытны несколько больше, чем само приложение. В этой статье будет дано описание двух способов настройки торрент-клиента таким образом, чтобы он соединятся с серверами-трекерами Рутрекера bt*.rutracker.cc и bt*.t-ru.org через сеть Tor, а не напрямую и открыто через сеть вашего провайдера.Итак, начнём! Google Compression proxy. Чтобы не повторять гугловые мануалы (все ссылки вы можете найти в конце статьи), просто скажу, что этот прокси сервер позволяет вашему Google Chrome значительно уменьшать количество воспринимаемого трафика за счёт его сжатия серверами Google. Работать прокси умеет по HTTP и по HTTPS. В первом случае используется адрес compress. Интересно, что для прокси требуется свой заголовок. В официальной документации его нет, однако можно найти исходники от гугла и немного в них покопаться. Выглядят они вот так (ссылка на самый интересный файл, размещено уже у меня на гихабе, поскольку в официальном репозитории на google code уже ничего посмотреть нельзя). Видимо, просто делалась защита от ленивого дурака. Однако, честным вариантом будет переписать это на Java так: public static String. Мой провайдер суров, и блокирует запросы, если они идут по HTTP через гугловую проксю, так что пришлось идти правильным путём через SSL. Web. View через SSL. Чтобы не идти долгим и печальным путём написания клиента с нуля, я решил «просто» показывать всё как есть через стандартный Web. View, благо ранее уже писал простое- клиент, которое делает примерно то же самое, и шустро работает даже на тяжёлом веб сайте. Кажется — работы на полчаса. При этом у многих это всё равно не работает, плюс есть проблемы с переключением режима проксирования — и её «решают» путём установки Thread. Sleep(1. 00. 0) между операциями. Хотя я не являюсь Java разработчиком, а просто иногда балуюсь, мне поплохело. Тор Торрент 97,5% tFILE.RU 50% РуТоР 97,3%. Открытые торрент-трекеры лучшие. Посоветуйте аналогичный торрент дом.ру омск эртелеком + тор + рутрекер. Тор(1965-ongoing) Год выпуска: 1965 Автор: Разные Жанр: комикс,фантастика. Издательство: Marvel Язык: Английский Качество: Отсканированные страницы Описание: Подборка комиксов о герое комиксов и скандинавском боге грома Торе.
Здравый смысл подсказал мне, что нужно перехватывать запросы из Webview (для этого у Web. View. Client есть чудесная функция should. Intercept. Request), и далее самому заниматься проксированием. Это у меня даже вполне получилось: Proxy proxy = new Proxy(Proxy. Type. HTTP, new Inet. Socket. Address(! Как заметили внимательные читатели, в параметрах функции указан 8. По довольно смешной причине. А именно — потому что Http. URLConnection не умеет работать с HTTPS проксями. У меня ушло куча времени, чтобы понять, что всё настолько плохо, и что нельзя сделать HTTPS прокси ни через Http. URLConnection, ни через популярный ok. Http. Я немного призадумался, затем решительным жестом отмёл все доводы Google о том, что библиотеки Apache не подходят для Android, стряхнул пыль с проверенных jar'ов и решительно подключил их к проекту. Пятый и шестой андроид на ура восприняли такой ужасный проступок. Если кто- то знает, как можно было решить проблему без использования библиотек Apache — расскажите. Конечно, можно было бы сделать всё на сокетах, но это довольно печально. Итак, мы наконец смогли отобразить главную страницу рутрекера. Казалось бы, победа близко. Как же я ошибался. Реклама. Практически с первой попытки отладки я столкнулся с тем, что всё чудовищно тормозит. Причина довольно очевидна — безумное количество рекламы всевозможных видов. Мне очень не хотелось с ней что- то делать — все мы знаем положение рутрекера, и чувакам явно нужно много золота для защиты от DDOS'a и родного государства — но с рекламой приложением было пользоваться вообще нереально. Правильным решением было бы находить её и вырезать из тела страницы, но более быстрым для реализации подходом было просто порезать её по хостам: довольно очевидный код public static boolean is. Если владельцев рутрекера это огорчит, то блокировку уберу — но скорее всего вместе с приложением. С чудовищными тормозами в нём просто не будет смысла. Отправка форм. Довольно откинувшись на стул, я обнаружил. Что было на самом деле весьма очевидно — поскольку в перехватываемом мной и передаваемом далее запросе я не отправлял данные, которые должны уйти в POST. Казалось бы, пара минут — и всё будет хорошо. Лучшие рекомендованные практики — внедрять в страницу свой javascript и вызывать из него специальные Java методы. Или переводить сервер на GET запросы. От первого варианта мне несколько поплохело, а второй недоступен по понятным причинам. Да и был бы некорректен. Почесав голову и попробовав отловить POST ещё в нескольких местах, я пришёл к выводу, что нормального решения всё же нет. В результате сделал решение смешное. А именно — при получении страницы менять метод всех форм с POST на GET. А после этого при следующем обращении конвертировать переданные в адресной строке параметры в тело POST запроса. Звучит ужасно, но всё не так плохо, если у вас нет адресной строки, в которой можно опозориться, больших переменных или файлов для передачи. Хотя нет, вру конечно. Всё очень плохо, но другого адекватного пути я не нашёл. Url. Encoded. Form. Entity get. 2post(Uri url) ? Что в общем тоже довольно логично, поскольку никто волшебно куками не управляет, а посылаем мы все заголовки вручную. Но здесь я в кои- то веки не ошибся в том, что Скрытый текст if (Utils. В ответе должен был быть 3. В результате я оказывался на странице форума по некорректному адресу с доменом login. Кстати, здесь же можно заметить, что пользовательскую куку мы бережно сохраняем, чтобы не пришлось потом заново авторизоваться. Теперь- то всё?! Поскольку по нажатию ссылок ничего хорошего не происходит. Но в этот раз всё тоже было несложно — в интерфейс добавилась программная менюшка с кнопочкой Share, которая позволяет отправить куда угодно Magnet ссылку. Было бы удобнее кидать ссылку на торрент файл, но он у вас явно будет блокирован. Конечно, можно было бы скачивать торрент файл и передавать его через шаринг — но это как- нибудь в другой раз. Результат. Можно посмотреть по скринам — главная страница и расшаривание magnet ссылки из топика. Осталось только опубликовать. На основании тех странных android приложений, которые я выкладывал раньше, у меня сложилось ощущение, что они пропускают вообще всё. Так что я с лёгким сердцем отправил приложение на публикацию и сел писать статью. Обычно приложение появлялось на google play в течении пары часов, так что времени как раз хватало. К сожалению, в этот раз прошло 8 часов. И в ответ пришло вот такое письмо. After review, Rutracker free — unofficial, ru. One of my colleagues will get back to you within 2 business days. Не совсем понятно, кто кого имперсонифицировал, но у меня было три варианта, что же не понравилось Google: Что я взял откуда- то иконки; Что я упомянул в комментариях, что приложение работает через google compression proxy; Что в качестве банеров я использовал варианты смешных логотипов рутрекера с нового конкурса. Конечно, в любом случае довольно неприятно, что нужно зачем- то переименовывать pakage и закачивать его заново. Да тебя ещё и предупреждают, что «я тебя запомнил, и ещё раз так сделаешь — забаню». Ну как- то по гопнически. Не ожидал, прям обидно. Ну ладно, как скажете — не стал писать, как работает приложение. Просто «приложение с проксированием, которое позволяет обходить блокировку rutracker. Ну и заодно поставил кривые нарисованные за пять минут иконки и аналогичные банеры. И что вы думаете — мои усилия были вознаграждены! Дальше мне пришёл следующий ответ. After review, Rutracker free, ru. Remember that additional enforcement could occur if there are further policy issues with your apps. If it’s possible to bring your app into compliance, you can sign in to your Developer Console and submit the policy compliant app using a new package name and a new app name. В общем, меня обвинили в том, что не то приложение только реферральные ссылки передаёт, то ли ничего кроме вебвьюва не делает. Ничего «левого» в приложении нет, а называть это «обычным отображением» тоже неверно — идёт довольно много работы по проксированию. Ну и особенно это меня удивило в свете того, что я уже успешно закачивал на Google Play приложения, которые фактически только состоят из вебвью на сайт. Нюансов было два — в приложении была авторизация, и я был хозяином сайта, на который шёл вебвью. Но я это никак не указывал, и Google узнать этого не мог. В общем, на оба этих обвинения я ответил просьбой разобраться — сутки ответа нет, может быть ответ придёт ещё через сутки. Хотя надежды как- то мало. Так что ставим пока что приложение из APK. Если оно таки появится на Google Play, то можно будет обновиться оттуда. To. Do. Если делать полноценное приятное приложение, то можно было бы добавить много всего хорошего. В том числе. Стили с адаптацией к просмотру с телефона и планшета; UPD: сделано в какой- то степени; Автоматическое обновление; UPD: сделано; Корректное вырезание рекламы; Передачу торрентов торрент файлами, а не magnet ссылками; Выход из авторизованного состояния на рутрекере (да, сейчас ты там авторизуешься навсегда); Какие- то осмысленные сообщения о вероятных ошибках; Совместимость с большим количеством устройств — сейчас можно попробовать запустить на Android от 4. У меня работает на Nexus 5 с Android 6 и на Sony Xperia Z3 с Android 5; Удобный ввод авторизации и поиска без того, чтобы тыкать на ужасные маленькие элементы веб формы; Убрать из кода некоторое количество копи- пейста; Добавить шифрование хранимой пользовательской куки уникальным для устройства ключом на случай, если данные с телефона украдут; Реализовать монетизацию приложения, свои всплывающие банеры и ссылки, которые принесли бы мне тонны золота. Попутно, правда, подтвердилось мнение о том, что среднее по больнице качество разработки на Android довольно сильно страдает, стандартные библиотеки не покрывают всех кейсов, и есть большое количество странных задач, которые никем толково не реализованы. Ну ничего страшного — путей обхода тысячи.— А если рутрекер заблокирует гугл за большое количество заходов с их прокси?— К ним и так сейчас через неё ходят, просто используя хром.
0 Comments
Leave a Reply. |
Details
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |