Форум программистов, компьютерный форум CyberForum.ru

Извлечение кода из страницы WebView - Android

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.70
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
26.03.2015, 09:49     Извлечение кода из страницы WebView #1
Здравствуйте.
Есть страница загруженная WebView с кодом авторизации, который нужно использовать в приложении.
Как этот код можно извлечь из WebView программно?
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
31.03.2015, 13:36  [ТС]     Извлечение кода из страницы WebView #21
Цитата Сообщение от Rube Посмотреть сообщение
Код из панели разработки браузера может не совпадать с исходным кодом страницы
Мне нужно изъять verifier code со станицы. Скриншот превью страницы и исходного кода в начале темы. Там нужный мне код идентичен в обоих случаях.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
31.03.2015, 13:53     Извлечение кода из страницы WebView #22
Вот тебе для примера POST запросец на авторизацию для joyreactor

Кликните здесь для просмотра всего текста
Hypertext Transfer Protocol
POST http://joyreactor.cc/login HTTP/1.1\r\n
[Expert Info (Chat/Sequence): POST http://joyreactor.cc/login HTTP/1.1\r\n]
Request Method: POST
Request URI: http://joyreactor.cc/login
Request Version: HTTP/1.1
Host: joyreactor.cc\r\n
Proxy-Connection: keep-alive\r\n
Content-Length: 138\r\n
Cache-Control: max-age=0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n
Origin: http://joyreactor.cc\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Referer: http://joyreactor.cc/login\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4\r\n
[truncated]Cookie: _ga=GA1.2.954934144.1426171673; __utma=181923772.954934144.1426171673.1426171673.1426253268.2; __utmz=181923772.1426171673.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); showVideoGif3=1; joyreactor=ver3d64ecd7043aa4
\r\n
[Full request URI: http://joyreactor.cchttp://joyreactor.cc/login]
[HTTP request 1/1]
[Response in frame: 32]
HTML Form URL Encoded: application/x-www-form-urlencoded
Form item: "signin[username]" = "username"
Form item: "signin[password]" = "password"
Form item: "signin[remember]" = "on"
Form item: "signin[_csrf_token]" = "ff37ead1f636ce6ab5aada5d2b5ffedc"


Добавлено через 11 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 String page_url = "some_url";
        Connection con = Jsoup.connect(page_url).timeout(DEFAULT_TIMEOUT);
        con.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        con.header("Cache-Control", "max-age=0");
        con.header("Accept-Encoding", "gzip, deflate, sdch");
        con.header("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
        con.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36");
        Document doc = null;
        try {
            doc = con.get();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String token = "";
        if (doc != null)
            token = doc.select("body").html();
что-то вроде такого тебе надо
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
31.03.2015, 15:13  [ТС]     Извлечение кода из страницы WebView #23
Цитата Сообщение от fgtmenow Посмотреть сообщение
что-то вроде такого тебе надо
ну да, что-то вроде такого.

А если точно , то мне нужно

1.отправить get запрос вида

Код
http://demo.weteam.biz/oadmin/oauth_authorize?oauth_token=f6f09355c0060db7da868a3d49c3a1e2
2. Получив и заполнив форму логин-пароль, отправить post запрос.

3. Получив страницу с кнопкой submit, подтвердить запросом get и получить страницу, с которой и нужно изъять verifier code.
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
31.03.2015, 15:31     Извлечение кода из страницы WebView #24
это хорошо, когда ты знаешь что тебе нужно) будут вопросы - обращайся)
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 00:48  [ТС]     Извлечение кода из страницы WebView #25
Цитата Сообщение от fgtmenow Посмотреть сообщение
будут вопросы - обращайся)
да собственно, сейчас это и есть пока вопрос -- составление запроса get и post средствами java.
разбираюсь...

Добавлено через 14 минут
нашел пример
буду пробовать

Добавлено через 7 часов 4 минуты
Цитата Сообщение от fgtmenow Посмотреть сообщение
будут вопросы - обращайся)
после первого запроса get получаю нужную строку типа
Код
MYURL?oauth_token=a4001969c0a46837d12f3768363a039d
его можно извлечь из ответа напрямую, методом типа
Java
1
String token = .......getData("oauth_token");
, или нужно парсить строку?
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
01.04.2015, 00:50     Извлечение кода из страницы WebView #26
думаю и так и так можно, как тебе проще так и реализуй. главное чтоб универсально было
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 08:57  [ТС]     Извлечение кода из страницы WebView #27
Код
http://myURL.com/oadmin/oauth_authorize?oauth_token=f6c22c6cf6a6ce6839c392f4b3813985
как jsop извлечь "oauth_token"?
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
01.04.2015, 09:41     Извлечение кода из страницы WebView #28
Java
1
2
int start = url.indexOf("oauth_token=");
String token = url.substring(start+12);
Добавлено через 1 минуту
это работа со строкой, ну же)
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 12:10  [ТС]     Извлечение кода из страницы WebView #29
а, ну понятно.

просто я ищу метод, которым непосредственно jsoup может изъять параметр с именем "oauth_token" из объекта String (в данном случае -- полученный url)
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
01.04.2015, 13:10     Извлечение кода из страницы WebView #30
лично мое мнение, что если задачу можно решить просто - то лучше решать ее просто
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 14:40  [ТС]     Извлечение кода из страницы WebView #31
Цитата Сообщение от fgtmenow Посмотреть сообщение
если задачу можно решить просто - то лучше решать ее просто
я и предполагал, что получить данные из объекта по имени этих денных -- это просто. )

Добавлено через 46 минут
HTML5
1
2
3
4
5
<script type="text/javascript">
   ................
   ...............
    var FORM_KEY = 'gaWM5idwEX8wl9Fv';
</script>
как изъять переменную FORM_KEY, используя парсинг jsoup?
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
01.04.2015, 15:00     Извлечение кода из страницы WebView #32
аналогично с адресной строкой,

Java
1
document.select("head").html().substring(  document.select("head").html().indexOf("var FORM_KEY = '")+17,document.select("head").html().indexOf("</script>"))
ну ты там допили чтоб работало
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 15:48  [ТС]     Извлечение кода из страницы WebView #33
допилил, достал form_key

теперь, получая страницу с логин-паролем, отправляю post-запрос, в post data параметры
form_key
login[username]
login[password]
oauth_token

те же параметры шлет в оригинале и браузер в post data.

в ответ получаю ту же самую страницу - с полями логин-пароль.
что не хватает сформированному мною post запросу? может, куки?
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
01.04.2015, 20:22     Извлечение кода из страницы WebView #34
ну для начала в теме не хватает кода твоего
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
01.04.2015, 21:07  [ТС]     Извлечение кода из страницы WebView #35
ну для начала в теме не хватает кода твоего
Приведу его фрагменты

метод, который непосредственно выполняет запрос POST
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public String sendPost(String targetURL, QueryString query) throws MalformedURLException, IOException{
 
        URL url;
        HttpURLConnection connection = null;
 
        try{
            
            url = new URL(targetURL);
        
            connection = (HttpURLConnection)url.openConnection();
 
            connection.setRequestMethod("POST");
            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
        
            DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
            wr.writeBytes(query.toString());
            wr.flush();
            wr.close();
        
            InputStream is = connection.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
 
            String line;
            StringBuilder response = new StringBuilder();
 
            while((line = rd.readLine()) != null) {
 
                response.append(line);
                System.out.println(line);        
                response.append('\r');
            }
            rd.close();
            return response.toString();
 
        } catch (Exception e) {
 
            e.printStackTrace();
            return null;
 
            } finally {
 
            if(connection != null) {
                connection.disconnect();
                }
            }
        }
Класс QueryString

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class QueryString {
    private StringBuffer query;
    
    public QueryString(Object name, Object value) throws UnsupportedEncodingException{
            add(name,value);
    }
    
    public QueryString() {
        query = new StringBuffer();
    }
    
    public synchronized QueryString add(Object name, Object value) throws UnsupportedEncodingException{
 
        if (!query.toString().trim().equals("")) query.append("&");
        query.append(URLEncoder.encode(name.toString(), "UTF-8"));
        query.append("=");
        query.append(URLEncoder.encode(value.toString(), "UTF-8"));
        return this;        
    }
    
    public String toString(){
    return query.toString();
    }
    
}

Подготовка query и вызов метода POST

Java
1
2
3
4
5
6
7
8
QueryString postQuery = new QueryString();
 
        postQuery.add("form_key", formKey);
        postQuery.add("login[username]", login);
        postQuery.add("login[password]", password);        
        postQuery.add("oauth_token", requestToken);
 
myConnectionClass.sendPost(myAuthorizationUrl, postQuery);
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
02.04.2015, 00:03     Извлечение кода из страницы WebView #36
приведи еще содержимое пакета уровня TCP, когда авторизуешся с браузера, потмоу что с виду все впорядке... а значит чего-то не хватает
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
02.04.2015, 00:36  [ТС]     Извлечение кода из страницы WebView #37
Цитата Сообщение от fgtmenow Посмотреть сообщение
содержимое пакета уровня TCP
Это POST Data?

Добавлено через 13 минут
Как-то сильно мудрено получается...
Может, использовать все-таки браузер android для отправки запросов.
А в конце, когда verifier code уже присутствует в коде загруженной страницы, изъять его оттуда в приложение.
У webview методов для изъятия html нет, как я понял. А другие браузеры android?
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
02.04.2015, 10:21     Извлечение кода из страницы WebView #38
в одном проекте я через JavascriptInteface работал с кодом через Webview, тоже неплохое решение

Добавлено через 7 минут
но webview работает только а ui потоке, придётся исхитриться чтобы его спрятать для пользователя. сейчас примерчик поищу как реализовать саму работу

Добавлено через 13 минут
ну вот например есть у нас активити с webview

в oncreate имеем:

Java
1
2
3
4
5
6
7
8
WebView mWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadsImagesAutomatically(false);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setLoadWithOverviewMode(true);
mWebView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36");
addInterface();
метод addInterface();

Java
1
2
3
4
5
6
7
8
9
  void addInterface() {
        mWebView.removeJavascriptInterface("HTMLOUT");
        class JavaScriptInterfaceGetHtml {
            public void getHTML(String s) {                           
                    Log.d("getHTML", "" + s);  
            }          
        }
        mWebView.addJavascriptInterface(new JavaScriptInterfaceGetHtml(), "HTMLOUT");
    }

и теперь, когда надо получить html код страницы - вызываем
Java
1
mWebView.loadUrl("javascript:window.HTMLOUT.getHTML('<head>'+document.getElementsByTagName('HTML')[0].innerHTML+'</head>');");
и html код подается входным параметром в метод getHTML(String s) класса JavaScriptInterfaceGetHtml
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
02.04.2015, 12:26  [ТС]     Извлечение кода из страницы WebView #39
т.е., правильно я понимаю, метод getHTML(String s) может, получив строку с html страницы, пропарсить ее, извлечь verifier code и передать его дальше по назначению?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2015, 13:02     Извлечение кода из страницы WebView
Еще ссылки по теме:

Android WebView. Получение исходного кода. Зависание
Получение html кода страницы Android
Android Вытянуть информацию с кода страницы сайта
Android Gif в WebView
Android Доступ из HTML кода страницы, загруженной в WebView, к данным приложения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fgtmenow
73 / 73 / 7
Регистрация: 29.03.2012
Сообщений: 253
02.04.2015, 13:02     Извлечение кода из страницы WebView #40
ну да, на яве уже как хочешь извращайся со строкой. Но эту связку не легко заставить работать
Yandex
Объявления
02.04.2015, 13:02     Извлечение кода из страницы WebView
Ответ Создать тему
Опции темы

Текущее время: 07:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru