Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 09.04.2012
Сообщений: 23

Порядок входа на страницу с залогиниванием

28.02.2014, 01:25. Показов 1006. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Сразу пишу, что с сетями я только столкнулся.
Есть ТЗ-подключиться к сайту, залогиниться и спарсить исходный код страницы.
Пробую делать это с помощью станд библиотек HttpURLConnection.
Но остановился на форме авторизации. То есть сервер не принимает мои данные лог/пасс.
Подскажите правильно ли я делаю?
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 static void main(String[] args) {
NewClass1 cm = new NewClass1();
    try {
        URL url = new URL("http://example.ru/login.php");
            HttpURLConnection conn =(HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("login","ivan");
            conn.setRequestProperty("password","12345");
            conn.setRequestProperty("User-Agent", "Mozilla 5.0 (Windows; U; " + "Windows NT 5.1; en-US; rv:1.8.0.11) ");
            
            
           conn.connect();
           conn.getInputStream();
           cm.storeCookies(conn);
           System.out.println(cm);
           cm.setCookies(url.openConnection());
            
           String headerName=null;
              for (int i=1; (headerName = conn.getHeaderFieldKey(i))!=null; i++) {
                    if (headerName.equals("Set-Cookie")) {                  
                    String cookie = conn.getHeaderField(i);
            
                    cookie = cookie.substring(0, cookie.indexOf(";"));
                    String cookieName = cookie.substring(0, cookie.indexOf("="));
                    String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length());
                    }
               }
        
        
        
        InputStream is = conn.getInputStream();
        int c;
        while ((c = is.read()) != -1)
        System.out.print((char) c);
  
        
        System.out.println(conn.getRequestMethod());
        System.out.println();
            
            
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
        
        
    }
    
}
класс NewClass1
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
public class NewClass1 extends HTTPCONNECTION1{
     private Map store;
 
    private static final String SET_COOKIE = "Set-Cookie";
    private static final String COOKIE_VALUE_DELIMITER = ";";
    private static final String PATH = "path";
    private static final String EXPIRES = "expires";
    private static final String DATE_FORMAT = "EEE, dd-MMM-yyyy hh:mm:ss z";
    private static final String SET_COOKIE_SEPARATOR="; ";
    private static final String COOKIE = "Cookie";
 
    private static final char NAME_VALUE_SEPARATOR = '=';
    private static final char DOT = '.';
    
    private DateFormat dateFormat;
 
    public NewClass1() {
 
    store = new HashMap();
    dateFormat = new SimpleDateFormat(DATE_FORMAT);
    }
    public void storeCookies(URLConnection conn) throws IOException {
    
    // let's determine the domain from where these cookies are being sent
    String domain = getDomainFromHost(conn.getURL().getHost());
    
    
    Map domainStore; // this is where we will store cookies for this domain
    
    // now let's check the store to see if we have an entry for this domain
    if (store.containsKey(domain)) {
        // we do, so lets retrieve it from the store
        domainStore = (Map)store.get(domain);
    } else {
        // we don't, so let's create it and put it in the store
        domainStore = new HashMap();
        store.put(domain, domainStore);    
    }
    String headerName=null;
    for (int i=1; (headerName = conn.getHeaderFieldKey(i)) != null; i++) {
        if (headerName.equalsIgnoreCase(SET_COOKIE)) {
        Map cookie = new HashMap();
        StringTokenizer st = new StringTokenizer(conn.getHeaderField(i), COOKIE_VALUE_DELIMITER);
        
        // the specification dictates that the first name/value pair
        // in the string is the cookie name and value, so let's handle
        // them as a special case: 
        
        if (st.hasMoreTokens()) {
            String token  = st.nextToken();
            String name = token.substring(0, token.indexOf(NAME_VALUE_SEPARATOR));
            String value = token.substring(token.indexOf(NAME_VALUE_SEPARATOR) + 1, token.length());
            domainStore.put(name, cookie);
            cookie.put(name, value);
        }
    
        while (st.hasMoreTokens()) {
            String token  = st.nextToken();
            cookie.put(token.substring(0, token.indexOf(NAME_VALUE_SEPARATOR)).toLowerCase(),
             token.substring(token.indexOf(NAME_VALUE_SEPARATOR) + 1, token.length()));
        }
        }
    }
    }
    public void setCookies(URLConnection conn) throws IOException {
    
    // let's determine the domain and path to retrieve the appropriate cookies
    URL url = conn.getURL();
    String domain = getDomainFromHost(url.getHost());
    String path = url.getPath();
    
    Map domainStore = (Map)store.get(domain);
    if (domainStore == null) return;
    StringBuffer cookieStringBuffer = new StringBuffer();
    
    Iterator cookieNames = domainStore.keySet().iterator();
    while(cookieNames.hasNext()) {
        String cookieName = (String)cookieNames.next();
        Map cookie = (Map)domainStore.get(cookieName);
        // check cookie to ensure path matches  and cookie is not expired
        // if all is cool, add cookie to header string 
        if (comparePaths((String)cookie.get(PATH), path) && isNotExpired((String)cookie.get(EXPIRES))) {
        cookieStringBuffer.append(cookieName);
        cookieStringBuffer.append("=");
        cookieStringBuffer.append((String)cookie.get(cookieName));
        if (cookieNames.hasNext()) cookieStringBuffer.append(SET_COOKIE_SEPARATOR);
        }
    }
    try {
        conn.setRequestProperty(COOKIE, cookieStringBuffer.toString());
    } catch (java.lang.IllegalStateException ise) {
        IOException ioe = new IOException("Illegal State! Cookies cannot be set on a URLConnection that is already connected. " 
        + "Only call setCookies(java.net.URLConnection) AFTER calling java.net.URLConnection.connect().");
        throw ioe;
    }
    }
 
    private String getDomainFromHost(String host) {
    if (host.indexOf(DOT) != host.lastIndexOf(DOT)) {
        return host.substring(host.indexOf(DOT) + 1);
    } else {
        return host;
    }
    }
 
    private boolean isNotExpired(String cookieExpires) {
    if (cookieExpires == null) return true;
    Date now = new Date();
    try {
        return (now.compareTo(dateFormat.parse(cookieExpires))) <= 0;
    } catch (java.text.ParseException pe) {
        pe.printStackTrace();
        return false;
    }
    }
 
    private boolean comparePaths(String cookiePath, String targetPath) {
    if (cookiePath == null) {
        return true;
    } else if (cookiePath.equals("/")) {
        return true;
    } else if (targetPath.regionMatches(0, cookiePath, 0, cookiePath.length())) {
        return true;
    } else {
        return false;
    }
    
    }
    
    /**
     * Returns a string representation of stored cookies organized by domain.
     */
 
    public String toString() {
    return store.toString();
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2014, 01:25
Ответы с готовыми решениями:

GWT GAE, нужно добавить страницу регистрации пользователя, страницу входа
Здравствуйте! У меня есть GWT-приложение, использую google app engine; нужно добавить страницу регистрации пользователя, страницу входа. ...

Как изменить страницу входа в PHPmyAdmin?
Здравствуйте. Выделенный сервер на Ubuntu. Nginx+Apache. MySQL. Страница для входа в php my admin такая ...

Где хранить данные последнего входа на страницу
Участвую в любительском проекте по разработке браузерной игры, хочу получить некий опыт разработки в этой области. Имеется такой вопрос: ...

1
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
02.03.2014, 14:56
Не, так не пойдет.
Для начала надо знать схему авторизации (Basic или Form).

Если первый случай, то хедер нужен такой

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

см. http://en.wikipedia.org/wiki/B... entication
(Client side)

Если авторизация через форму, надо заглянуть в код страницы и выяснить какие переменные нужно задавать, и отправить их в *теле* запроса (т.е. через getOutputStream()) в виде строки типа
"formLogin=...&formPass=...", причем предварительно пропустить через UrlEncoder
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2014, 14:56
Помогаю со студенческими работами здесь

Вместо редиректа на страницу входа возвращается 401
Всем привет. Пытаюсь добавить авторизацию Asp.Net Identity в существующий проект. Делаю по образу и подобию того, как авторизация сделана...

порядок группы равен 4 и в ней только 1 элемент имеет порядок 4. какой порядок имеют остальные элементы? сколько в ней подгрупп?
Совсем не чего не понятно

Передача переменной из формы в точку входа и из точки входа в форму
Здравствуйте всем. Как мне передать переменную с обработчика событий из формы MyForm.h в MyForm.cpp в точку входа WINAPI wWinMain и...

Убрать с сайта кнопку входа после самого входа
На сайте расположено окно входа, которое открывается по кнопке, как сделать, чтобы когда пользователь зашел, кнопки не было?) &lt;div...

Что такое точка входа? (opengl32.dll была загружена, но найти точку входа для DllRegisterServer не удалось.)
:help: при открывании игр показывает окно: RegSvr32 opengl32.dll была загружена, но найти точку входа для DllRegisterServer не...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru