На сайте 4PDA есть ветка форума Программы на заказ в которой пользователи просят разработчиков написать программы для Android. С некоторых пор и я там зависаю в надежде поймать интересный заказ. Заказов много, но все мягко говоря идиотские. Один заказ все таки меня заинтересовал. Звучал заказ так: «Добрый день всем! Кто сможет «доделать» приложение? есть приложение клиент для сайта mw.kg, но через него не скачивается с сайта контент! Кто сможет доделать?»
Скачал я apk, декомпилировал. Оказалось, что программа на самом деле представляет из себя WebView в котором отображается мобильная версия сайта. Тут мне стало интересно в чем же проблема. Вроде все просто. Тем более, что с WebView я уже имел дело.
Пообщавшись с заказчиком выяснилось, что под словом «доделать» понимается написать программу с нуля так как исходников программы нет 🙂 Отсутствие исходников совсем не испугало меня, уж очень хотелось разобраться в чем проблема со скачиванием.
Распотрошив старую программу, я создал новую по оформлению не отличающуюся от старой. Вот так выглядит окно программы.
Проблему со скачиванием я решил. Действительно была проблема над которой пришлось поломать голову. Дело в том, что скачивание на сайте разрешено только авторизованным пользователям. Авторизация происходит в WebView и авторизационные данные хранятся в нем же.
Решил проблему с помощью CookieManager. С его помощью можно получить HTTP cookie для нужного нам домена «http://mw.kg» и подставлять их в HttpURLConnection
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// получаем cookie String cookie = CookieManager.getInstance().getCookie("http://mw.kg"); // создаем соединени HttpURLConnection con = (HttpURLConnection)new URL("SOME_DOWNLOAD_URL").openConnection(); // установка сохраненных в WebView cookie con.setRequestProperty("Cookie", cookie); // дальше заполнение остальных свойств con.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); con.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch"); con.setRequestProperty("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"); con.setRequestProperty("Connection", "keep-alive"); con.setRequestProperty("Host", "mw.kg"); con.setRequestProperty("Referer", referer); con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"); con.setRequestMethod("GET"); con.connect(); |
Из полученного ответа получается имя файла и по такому же алгоритму скачивается сам контент.
Программа доступна для скачивания на Google Play