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

POST авторизация с использованием JSOUP - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Заполнение ListView в AsyncTask http://www.cyberforum.ru/android-dev/thread1411813.html
Нужно заполнить ListView картинками, которые скачиваются в AsyncTask с помощью Picasso. Картинки скачиваются нормально, ArrayList и ArrayAdapter заполняются, но при adapter.notifyDataSetChanged(); в...
Программирование Android Преобразование EditText в Double Здравствуйте, понемногу изучаю андроид и вот уперся в проблему, точнее в не знание. Есть EditText в нем указал что можно вводить только десятичные числа. А вот теперь сама проблема как правильно... http://www.cyberforum.ru/android-dev/thread1411782.html
Android Studio. Установка приложения на эмулятор. Application Installation Failed Программирование Android
С недавних пор перестали устанавливаться на эмулятор абсолютно все мои приложения. Даже только что созданный пустой проект не устанавливается. Все время вываливается ошибка на скрине. Как исправить...
Как сохранять добавленное в ListView поле? Программирование Android
День добрый. Подскажите как можно сохранять добавленное поле , что бы в следующий раз при запуске приложения оно было и добавлять к имеющимся уже public class MainActivity extends Activity { ...
Программирование Android Обработка нажатия на RadioButton http://www.cyberforum.ru/android-dev/thread1411653.html
Постигаю андроид. Не могу разобраться со свичем. EditText принимает число, сохранил его, дальше выбираю RadioBatton и нифига не происходит) public void onClick(View view) { ...
Программирование Android Изменять изображение в зависимости от количества нажатий Всем привет , помогите нубу) Как сделать чтобы , кликая на кнопку, допустим 100 раз появилось изображение ,200 раз другое public class MainActivity extends ActionBarActivity { public int... подробнее

Показать сообщение отдельно
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 254
05.04.2015, 03:46  [ТС]
Спасибо всем тем, кто откликнулся помочь.. никому собственно.

Работающее решение следующее:
Кликните здесь для просмотра всего текста

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package com.noxx.joyreactor.Net;
 
 
import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;
 
import com.noxx.joyreactor.Global;
 
import org.jsoup.Connection;
import org.jsoup.helper.HttpConnection;
import org.jsoup.nodes.Document;
 
import java.io.IOException;
import java.util.Map;
 
public class Auth {
    Activity activity;
    Global global;
    int DEFAULT_TIMEOUT = 7000;
 
    public Auth(Activity activity) {
        this.activity = activity;
        this.global = (Global) activity.getApplication();
    }
 
    public void doAuth() {
        new AuthTask().execute();
    }
 
    void makeAuth() {
        Document doc = null;
        try {
            String loginURL = global.getJoy_url() + "/login";
            String itemURL = global.getJoy_url();
            String useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36";
            String login = "username";
            String pass = "password";
 
            //получаем страницу входа
            Connection connection1 = HttpConnection.connect(loginURL)
                    .ignoreHttpErrors(true)
                    .userAgent(useragent);
            Connection.Response response1 = connection1
                    .execute();
            //цапаем оттуда токен
            String token = response1.parse().getElementById("signin__csrf_token").attr("value");      
            Log.d("token", token);
 
            for (Map.Entry<String, String> cookie : response1.cookies().entrySet()) {
                Log.d("cookie1", cookie.getKey() + " : " + cookie.getValue());
            }
            for (Map.Entry<String, String> head : response1.headers().entrySet()) {
                Log.d("headers1", head.getKey() + " : " + head.getValue());
            }
            Log.d("headers1", " .... ");
            //делаем пост запрос
            Connection connection2 = connection1.url(loginURL)
                   // .timeout(7000)
                    .cookies(response1.cookies())                 
                    .ignoreHttpErrors(true)
                    .data("signin[username]", login)
                    .data("signin[password]", pass)
                    .data("signin[remember]", "on")
                    .data("signin[_csrf_token]", token)
                    .method(Connection.Method.POST)
                    .followRedirects(true);
 
            Connection.Response response2 = connection2.execute();
            for (Map.Entry<String, String> cookie : response2.cookies().entrySet()) {
                Log.d("cookie2", cookie.getKey() + " : " + cookie.getValue());
            }
            for (Map.Entry<String, String> head : response2.headers().entrySet()) {
                Log.d("headers2", head.getKey() + " : " + head.getValue());
            }
            Log.d("headers2", " .... ");
 
            Document tt2 = response2.parse();
            String t2 = tt2.select(".login").html();
            Log.d("login tag2", t2);
            String error2 = tt2.select(".error_list").text();
            Log.d("error tag2", error2);           
            // получаем страницу (уже должны быть авторизованы)  
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    class AuthTask extends AsyncTask<Void, Void, Void> {
 
        @Override
        protected Void doInBackground(Void... params) {
            makeAuth();
            return null;
        }
    }
}


В чем была суть моей ошибки:
  • Во-первых на странице присутствовало 2 csrf token, один это сгенерированный для текущей страницы, второй для непосредсвенной авторизации необходим. И я пихал не то и не туда.
  • Во-вторых надо использовать 1 объект connection для всех манипуляций
  • В-третьих куки, их необходимо пихать в каждый коннект из предыдущего response


P.s. тему можно закрывать, задача решена
3
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru