Авторизация на сайте с jsp
От: zoom-zoom  
Дата: 16.11.16 09:53
Оценка:
День добрый!
Есть сайт https://www.portfolio123.com/, хочу тянуть данные из него, но не получается авторизоваться из собственного приложения.
Исследую запрос через утилиты браузеров, которые отображают передачу моих "ручных" запросов POST.
Запрос отправляется такой: "LoginUsername=мояпочта@почта.ru&LoginPassword=пароль&LoginRememberMe=1&Login=Login&url=index.jsp"
Как представлять index.jsp, остается загадкой.
                //Создаем запрос
                HttpWebResponse result = null;
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://www.portfolio123.com/login.jsp?url=");
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                byte[] SomeBytes = null;
                string FormParams = "LoginUsername=мояпочта@почта.ru&LoginPassword=пароль&LoginRememberMe=1&Login=Login&url=index.jsp";
                SomeBytes = Encoding.UTF8.GetBytes(FormParams);
                req.ContentLength = SomeBytes.Length;
                Stream newStream = req.GetRequestStream();
                newStream.Write(SomeBytes, 0, SomeBytes.Length);
                newStream.Close();
                result = (HttpWebResponse)req.GetResponse();

                //Получаем куки
                string[] cookieVal = null;
                if (result.Headers["Set-Cookie"] != null)
                    cookieVal = result.Headers["Set-Cookie"].Split(new char[] { ',' });
                Stream ReceiveStream = result.GetResponseStream();
                Encoding encode = Encoding.GetEncoding("utf-8");
                StreamReader sr = new StreamReader(ReceiveStream, encode);
                string answer = sr.ReadToEnd();
                sr.Close();
                result.Close();
                CookieContainer cookie = new CookieContainer();
                foreach (string cook in cookieVal)
                {
                    string[] cookie1 = cook.Split(new char[] { ';' });
                    cookie.Add(new Cookie(cookie1[0].Split(new char[] { '=' })[0], cookie1[0].Split(new char[] { '=' })[1], cookie1[1].Split(new char[] { '=' })[1], "www.portfolio123.com"));
                }

                //запрос на скачивание нужного нам файлика, используя куки
                string url = "https://www.portfolio123.com/p123/DownloadStockRank?mktUid=4737&ticker=IBM&rankUid=361&rankName=Balanced4";
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.CookieContainer = cookie;
                request.Method = "GET";
                request.ContentType = "application/octet-stream;charset=ISO-8859-1";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream ReceiveStream1 = response.GetResponseStream();
                StreamReader sr1 = new StreamReader(ReceiveStream1, encode);
                string html = sr1.ReadToEnd();
                response.Close();


— пример кода, должен делать запрос на авторизацию, получить куки и использовать их для дальнейшей работы, а именно для скачивания файлика. Но в результате, что уже только не перепробовал, одно и то же — получаем страничку html с запросом на авторизацию! полагаю, что авторизация не проходит и дело в index.jsp, но как его готовить?
Re: Авторизация на сайте с jsp
От: SergASh  
Дата: 16.11.16 14:04
Оценка: +1
Через утилиты брацзеров не надо, потому как они не показывают что ваша программа шлет.
Возьмите Fiddler, там будет видно что шлет браузер, и что программа. Можно даже будет
выгрузить лог в файлы и сравнить любимым merge tool'ом.
Re: Авторизация на сайте с jsp
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.11.16 14:48
Оценка:
Здравствуйте, zoom-zoom, Вы писали:

Проще использовать AngleSharp http://ru.stackoverflow.com/questions/587807/login-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-html-agility-pack/587851#587851
Там кстати есть поддержка JS
https://github.com/AngleSharp/AngleSharp/wiki/Examples
и солнце б утром не вставало, когда бы не было меня
Re[2]: Авторизация на сайте с jsp
От: fddima  
Дата: 16.11.16 23:52
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Проще использовать AngleSharp http://ru.stackoverflow.com/questions/587807/login-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-html-agility-pack/587851#587851

S>Там кстати есть поддержка JS
S>https://github.com/AngleSharp/AngleSharp/wiki/Examples
Кстати в тему — в AngleSharp весьма тормозной css query engine (по сравнению с CsQuery и/или нативным браузером).
Re[3]: Авторизация на сайте с jsp
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.11.16 06:55
Оценка:
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, Serginio1, Вы писали:


S>> Проще использовать AngleSharp http://ru.stackoverflow.com/questions/587807/login-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-html-agility-pack/587851#587851

S>>Там кстати есть поддержка JS
S>>https://github.com/AngleSharp/AngleSharp/wiki/Examples
F> Кстати в тему — в AngleSharp весьма тормозной css query engine (по сравнению с CsQuery и/или нативным браузером).
Дав нет. Там от версии к версии все быстрее. Основные затраты это получение данных от сервера.
и солнце б утром не вставало, когда бы не было меня
Re[4]: Авторизация на сайте с jsp
От: fddima  
Дата: 17.11.16 17:06
Оценка:
Здравствуйте, Serginio1, Вы писали:

F>> Кстати в тему — в AngleSharp весьма тормозной css query engine (по сравнению с CsQuery и/или нативным браузером).

S> Дав нет. Там от версии к версии все быстрее. Основные затраты это получение данных от сервера.
Это уже у кого как. У меня перфоманс css query engine весьма щепетильное место. Ладно, это оффтоп.
Re: Авторизация на сайте с jsp
От: · Великобритания  
Дата: 17.11.16 17:19
Оценка:
Здравствуйте, zoom-zoom, Вы писали:

ZZ>Есть сайт https://www.portfolio123.com/, хочу тянуть данные из него, но не получается авторизоваться из собственного приложения.

ZZ>Исследую запрос через утилиты браузеров, которые отображают передачу моих "ручных" запросов POST.
ZZ>Запрос отправляется такой: "LoginUsername=мояпочта@почта.ru&LoginPassword=пароль&LoginRememberMe=1&Login=Login&url=index.jsp"
может быть в логине/пароле символы, которые надо заескейпить...

ZZ>
ZZ>                string answer = sr.ReadToEnd();
ZZ>

Самое интересное — а что в answer-то?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Авторизация на сайте с jsp
От: zoom-zoom  
Дата: 22.11.16 11:03
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, zoom-zoom, Вы писали:


ZZ>>Есть сайт https://www.portfolio123.com/, хочу тянуть данные из него, но не получается авторизоваться из собственного приложения.

ZZ>>Исследую запрос через утилиты браузеров, которые отображают передачу моих "ручных" запросов POST.
ZZ>>Запрос отправляется такой: "LoginUsername=мояпочта@почта.ru&LoginPassword=пароль&LoginRememberMe=1&Login=Login&url=index.jsp"
·>может быть в логине/пароле символы, которые надо заескейпить...

ZZ>>
ZZ>>                string answer = sr.ReadToEnd();
ZZ>>

·>Самое интересное — а что в answer-то?

в answer начальная страничка без авторизации.
Re[5]: Авторизация на сайте с jsp
От: zoom-zoom  
Дата: 22.11.16 11:15
Оценка:
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, Serginio1, Вы писали:


F>>> Кстати в тему — в AngleSharp весьма тормозной css query engine (по сравнению с CsQuery и/или нативным браузером).

S>> Дав нет. Там от версии к версии все быстрее. Основные затраты это получение данных от сервера.
F> Это уже у кого как. У меня перфоманс css query engine весьма щепетильное место. Ладно, это оффтоп.

Спасибо, буду разбираться со спец. программами.
Re[3]: Авторизация на сайте с jsp
От: · Великобритания  
Дата: 22.11.16 11:28
Оценка:
Здравствуйте, zoom-zoom, Вы писали:

ZZ>·>Самое интересное — а что в answer-то?

ZZ>в answer начальная страничка без авторизации.
Значит ты посылаешь запрос, который серверу не нравится, и вместо подтверждения авторизации он просто тебя на хоумпейдж редиректит.
Смотри что посылается, сравнивай с тем что делает браузер. Может не ту кодировку используешь, или неправильно формируешь тело запроса. Вот это выглядит подозрительно "LoginUsername=мояпочта@почта.ru&LoginPassword=пароль" — особенно если в логине/пароле есть non-ascii или спец-символы.
Вот тут вроде есть способ поглядеть raw http: http://stackoverflow.com/questions/3808016/how-do-i-see-the-raw-http-request-that-the-httpwebrequest-class-sends
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Авторизация на сайте с jsp
От: zoom-zoom  
Дата: 23.11.16 11:17
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, zoom-zoom, Вы писали:


ZZ>>·>Самое интересное — а что в answer-то?

ZZ>>в answer начальная страничка без авторизации.
·>Значит ты посылаешь запрос, который серверу не нравится, и вместо подтверждения авторизации он просто тебя на хоумпейдж редиректит.
·>Смотри что посылается, сравнивай с тем что делает браузер. Может не ту кодировку используешь, или неправильно формируешь тело запроса. Вот это выглядит подозрительно "LoginUsername=мояпочта@почта.ru&LoginPassword=пароль" — особенно если в логине/пароле есть non-ascii или спец-символы.
·>Вот тут вроде есть способ поглядеть raw http: http://stackoverflow.com/questions/3808016/how-do-i-see-the-raw-http-request-that-the-httpwebrequest-class-sends

С логином и паролем нет проблем, без спец символов все то же самое. Вместо почты можно логин подставлять можно. Тут дело именно в подаче index.jsp. Пока не могу понять, как именно этот элемент прикручивать.
Re[5]: Авторизация на сайте с jsp
От: · Великобритания  
Дата: 23.11.16 12:44
Оценка:
Здравствуйте, zoom-zoom, Вы писали:

ZZ>·>Значит ты посылаешь запрос, который серверу не нравится, и вместо подтверждения авторизации он просто тебя на хоумпейдж редиректит.

ZZ>·>Смотри что посылается, сравнивай с тем что делает браузер. Может не ту кодировку используешь, или неправильно формируешь тело запроса. Вот это выглядит подозрительно "LoginUsername=мояпочта@почта.ru&LoginPassword=пароль" — особенно если в логине/пароле есть non-ascii или спец-символы.
ZZ>·>Вот тут вроде есть способ поглядеть raw http: http://stackoverflow.com/questions/3808016/how-do-i-see-the-raw-http-request-that-the-httpwebrequest-class-sends

ZZ>С логином и паролем нет проблем, без спец символов все то же самое. Вместо почты можно логин подставлять можно. Тут дело именно в подаче index.jsp. Пока не могу понять, как именно этот элемент прикручивать.

Очень вряд ли. Скорее всего этот параметр абсолютно неважен, он скорее всего означает куда делать редирект после успешного логина. А у тебя тупо авторизация не проходит.
Надо сравнивать raw http трафик и делать его идентичным, тут всё что угодно может быть — даже может быть, что тебя сервак по user-agent отшивает как робота...
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Авторизация на сайте с jsp
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.11.16 12:57
Оценка:
Здравствуйте, zoom-zoom, Вы писали:

Берешь в руки фиддлер и сравниваешь
и солнце б утром не вставало, когда бы не было меня
Re[2]: Авторизация на сайте с jsp
От: zoom-zoom  
Дата: 23.11.16 14:09
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, zoom-zoom, Вы писали:


S>Берешь в руки фиддлер и сравниваешь


Спасибо, скачал Fiddler, буду разбираться теперь с ним.
Re: Авторизация на сайте с jsp
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 09.12.16 21:51
Оценка:
Здравствуйте, zoom-zoom, Вы писали:

ZZ>- пример кода, должен делать запрос на авторизацию, получить куки и использовать их для дальнейшей работы, а именно для скачивания файлика. Но в результате, что уже только не перепробовал, одно и то же — получаем страничку html с запросом на авторизацию! полагаю, что авторизация не проходит и дело в index.jsp, но как его готовить?


Мне встречались веб-приложения, которые создают сессию только при первом GET-запросе (логично предполагая, что юзер не сможет ничего ввести до того, как получит форму). Потому попробуйте запросить страницу логина, затем вытянуть оттуда все куки и отправить их уже вместе со своим POST-запросом на аутентификацию.
  Ворчание
Аутентификация и авторизация — это не одно и то же.
[КУ] оккупировала армия.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.