С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
97 / 90 / 18
Регистрация: 09.06.2012
Сообщений: 215
1

WebRequest работа после авторизации

21.03.2013, 08:13. Показов 2658. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Есть задача, авторизоваться на сайте поставщика и скачать с него новый прайс-лист.

Бьюсь 3й день, не получается работать с сайтом после успешной авторизации
Подскажите пожалуйста, может я где-то что-то забываю передать?

Вот мои потуги
Кликните здесь для просмотра всего текста

C#
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
public void GetPriceList2(string filename)
        {
            //вытаскиваем данные о вьюстейт
            const string uri = "https://b2b.ocs.ru/login.aspx";
            var myCookieContainer = new CookieContainer();
 
            var request = WebRequest.Create(uri) as HttpWebRequest;
            if (request == null) return;
 
            var response = request.GetResponse() as HttpWebResponse;
            if (response == null) return;
 
            var responseStream = response.GetResponseStream();
            if (responseStream == null) return;
 
            var reader = new StreamReader(responseStream, Encoding.UTF8);
 
            //отправим запрос
            request.Method = "GET";
            request.KeepAlive = false;
            var srcString = reader.ReadToEnd();
 
            // ViewState               
            const string viewStateFlag = "id=\"__VIEWSTATE\" value=\"";
            var i = srcString.IndexOf(viewStateFlag, StringComparison.Ordinal) + viewStateFlag.Length;
            var j = srcString.IndexOf("\"", i, StringComparison.Ordinal);
            var viewState = srcString.Substring(i, j - i);
 
            // EventValidation               
            const string eventValidationFlag = "id=\"__EVENTVALIDATION\" value=\"";
            i = srcString.IndexOf(eventValidationFlag, StringComparison.Ordinal) + eventValidationFlag.Length;
            j = srcString.IndexOf("\"", i, StringComparison.Ordinal);
            var eventValidation = srcString.Substring(i, j - i);
 
            //Авторизуемся------------------------------------------------------------------------------------------
            var requestPost = WebRequest.Create(uri) as HttpWebRequest;
            if (requestPost == null) return;
 
            const string userName = "логин";
            const string password = "пароль";
 
            var viewStatePost = HttpUtility.UrlEncode(viewState);
            var eventValidationPost = HttpUtility.UrlEncode(eventValidation);
            var submitButton = HttpUtility.UrlEncode("Войти");
            const string formatString = "ctl00$Content$txtUsername={0}&ctl00$Content$txtPassword={1}&ctl00$Content$btnLogin={2}&__VIEWSTATE={3}&__EVENTVALIDATION={4}&__LASTFOCUS={5}&__EVENTTARGET={6}&__EVENTARGUMENT={7}&ctl00$Content$hdnPassword={8}&ctl00$Content$hdnLogin={9}&ctl00$Content$hdnStep{10}";
            var postString = string.Format(formatString, userName, password, submitButton, viewStatePost, eventValidationPost, "", "", "", "", "", "");
 
            var postData = Encoding.ASCII.GetBytes(postString);
 
            requestPost.Method = "POST";
            //requestPost.Referer = uri;
            //requestPost.KeepAlive = false;
            requestPost.UserAgent = "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";
            requestPost.ContentType = "application/x-www-form-urlencoded";
            requestPost.CookieContainer = myCookieContainer;
            requestPost.Accept = "text/html, application/xhtml+xml, */*";
            requestPost.Headers.Add("Accept-Language", "ru-RU");
            requestPost.AllowAutoRedirect = true;
            requestPost.ContentLength = postData.Length;
 
            // submit data
            var outputStreamPost = requestPost.GetRequestStream();
            outputStreamPost.Write(postData, 0, postData.Length);
            outputStreamPost.Close();
 
            var responsePost = requestPost.GetResponse() as HttpWebResponse;
            if (responsePost == null) return;
            var responseStreamPost = responsePost.GetResponseStream();
            if (responseStreamPost == null) return;
            responseStreamPost = responsePost.GetResponseStream();
            if (responseStreamPost == null) return;
            var readerPost = new StreamReader(responseStreamPost, Encoding.UTF8);
            var srcStringPost = readerPost.ReadToEnd();
            outputStreamPost.Close();
 
            //В ответе страница после успешной авторизации, т.е. видно все, что доступно авторизованному
            Console.WriteLine(srcStringPost);
            //-------Авторизуемся------------------------------------------------------------------------------------------
 
            //Читаем страницу доступную авторизованному пользователю---------------------------------------------------------------------------------------------------
            
            const string uriNew = "https://b2b.ocs.ru/Orders/Requests.aspx";
 
            var requestNew = WebRequest.Create(uriNew) as HttpWebRequest;
            if (requestNew == null) return;
 
            var responseNew = requestNew.GetResponse() as HttpWebResponse;
            if (responseNew == null) return;
 
            var responseStreamNew = responseNew.GetResponseStream();
            if (responseStreamNew == null) return;
 
            var readerNew = new StreamReader(responseStreamNew, Encoding.UTF8);
 
            //отправим запрос
            
            var cookies = myCookieContainer.GetCookies(new Uri(uri));
            Console.WriteLine(myCookieContainer.Count);
            foreach (var cookie in cookies)
            {
                Console.WriteLine(cookie);
            }
            requestNew.Method = "GET";
            requestNew.CookieContainer = myCookieContainer;
            var srcStringNew = readerNew.ReadToEnd();
 
//ВОТ ТУТ ОПЯТЬ СТРАНИЦА О ТОМ ЧТО НАДО АВТОРИЗОВАТЬСЯ, т.е. как первый раз зашел. Куки заполнены
            Console.WriteLine(srcStringNew);
        }


Буду очень признателен если направите в нужно русло. Спасибо!
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.03.2013, 08:13
Ответы с готовыми решениями:

Http запрос к Web-сервису после успешной авторизации
Привет всем! Нуждаюсь в помощи при создании правильного запроса. У меня клиент-приложение посылает...

Работа с капчей при авторизации регистрации на mail.ru
В общем пытаюсь я программно зарегистрироваться на mail.ru. Отловил запрос, переписал в...

Вывод логина после авторизации
Подскажите пожалуйста. Есть бд на ms sql server 2014 и visual studio 2013,я сделал форму...

Вывод ФИО после авторизации
Добрый день! Прошу помощи) застряла на этом этапе. Запускаю приложение, после окна авторизации с...

5
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
21.03.2013, 09:35 2
ты конечно прости но там слишком сложная процедура получения доступа, а без пары "Login/Pwd" сложно програмно пройти авторизацию :-D, единственное что могу посоветовать поставь себе на комп программу Fiddler и посмотри какие пакеты на сайт шлет браузер, а потом с эмулируй это в своей программе
1
97 / 90 / 18
Регистрация: 09.06.2012
Сообщений: 215
21.03.2013, 10:57  [ТС] 3
Так с помощью него(Fiddler) и смотрел. Авторизация проходит, спасибо ему(Fiddler) Проблема отправки дальнейших запросов (
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
21.03.2013, 15:04 4
Для дальнейший работы с куками ,извлекайте и добавляйте их в новый запрос следующим способом
C#
1
2
3
  string  cookie = requestPost.CookieContainer.GetCookieHeader(requestPost.RequestUri);
               
  requestNew.Headers.Add(HttpRequestHeader.Cookie, cookie);
0
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
21.03.2013, 17:43 5
Цитата Сообщение от Vitall Посмотреть сообщение
Для дальнейший работы с куками ,извлекайте и добавляйте их в новый запрос следующим способом
C#
1
2
3
  string  cookie = requestPost.CookieContainer.GetCookieHeader(requestPost.RequestUri);
               
  requestNew.Headers.Add(HttpRequestHeader.Cookie, cookie);
дак он их и подключает -
C#
1
 requestNew.CookieContainer = myCookieContainer;
нужно смотреть через сниффер,и сравнивать с программной отправкой. так будет все понятно, что делаешь не так.

Добавлено через 4 минуты
HTML5
1
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1MTMzNDc2MjdkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tL11lfXxYBBRpjdGwwMCRDb39991ZW50JGNiUmVtZW63iZXJNZQ==" />
а это что? попробуй парсить и добавлять при отправке.
0
97 / 90 / 18
Регистрация: 09.06.2012
Сообщений: 215
22.03.2013, 06:59  [ТС] 6
Фух, в общем
при POST запросе изменил
Код
requestPost.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";
и при новом чтении передаю куки перед отправкой
C#
1
2
3
4
5
6
7
8
9
10
11
var requestNew = WebRequest.Create(uriNew) as HttpWebRequest;
            if (requestNew == null) return;
            requestNew.Method = "GET";
            requestNew.CookieContainer = myCookieContainer;
//И до кучи
            requestNew.Accept = "text/html, application/xhtml+xml, */*";
            requestNew.Referer = "https://b2b.ocs.ru/default.aspx";
            requestNew.Headers.Add("Accept-Language", "ru-RU");
            requestNew.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";
            requestNew.KeepAlive = true;
            requestNew.Host = "b2b.ocs.ru";
Заработало, вот конечный вариант.
Кликните здесь для просмотра всего текста
C#
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
 //вытаскиваем данные о вьюстейт
            const string uri = "https://b2b.ocs.ru/login.aspx";
            var myCookieContainer = new CookieContainer();
 
            var request = WebRequest.Create(uri) as HttpWebRequest;
            if (request == null) return;
 
            var response = request.GetResponse() as HttpWebResponse;
            if (response == null) return;
 
            var responseStream = response.GetResponseStream();
            if (responseStream == null) return;
 
            var reader = new StreamReader(responseStream, Encoding.UTF8);
 
            //отправим запрос
            request.Method = "GET";
            request.KeepAlive = false;
            var srcString = reader.ReadToEnd();
 
            // ViewState               
            const string viewStateFlag = "id=\"__VIEWSTATE\" value=\"";
            var i = srcString.IndexOf(viewStateFlag, StringComparison.Ordinal) + viewStateFlag.Length;
            var j = srcString.IndexOf("\"", i, StringComparison.Ordinal);
            var viewState = srcString.Substring(i, j - i);
 
            // EventValidation               
            const string eventValidationFlag = "id=\"__EVENTVALIDATION\" value=\"";
            i = srcString.IndexOf(eventValidationFlag, StringComparison.Ordinal) + eventValidationFlag.Length;
            j = srcString.IndexOf("\"", i, StringComparison.Ordinal);
            var eventValidation = srcString.Substring(i, j - i);
 
            //Авторизуемся------------------------------------------------------------------------------------------
            var requestPost = WebRequest.Create(uri) as HttpWebRequest;
            if (requestPost == null) return;
 
            const string userName = "логин";
            const string password = "пароль";
 
            var viewStatePost = HttpUtility.UrlEncode(viewState);
            var eventValidationPost = HttpUtility.UrlEncode(eventValidation);
            var submitButton = HttpUtility.UrlEncode("Войти");
            const string formatString = "ctl00$Content$txtUsername={0}&ctl00$Content$txtPassword={1}&ctl00$Content$btnLogin={2}&__VIEWSTATE={3}&__EVENTVALIDATION={4}&__LASTFOCUS={5}&__EVENTTARGET={6}&__EVENTARGUMENT={7}&ctl00$Content$hdnPassword={8}&ctl00$Content$hdnLogin={9}&ctl00$Content$hdnStep{10}";
            var postString = string.Format(formatString, userName, password, submitButton, viewStatePost, eventValidationPost, "", "", "", "", "", "");
 
            var postData = Encoding.ASCII.GetBytes(postString);
 
            requestPost.Method = "POST";
            //requestPost.Referer = uri;
            //requestPost.KeepAlive = false;
            requestPost.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";
            requestPost.ContentType = "application/x-www-form-urlencoded";
            requestPost.CookieContainer = myCookieContainer;
            requestPost.Accept = "text/html, application/xhtml+xml, */*";
            requestPost.Headers.Add("Accept-Language", "ru-RU");
            requestPost.AllowAutoRedirect = true;
            requestPost.ContentLength = postData.Length;
 
            // submit data
            var outputStreamPost = requestPost.GetRequestStream();
            outputStreamPost.Write(postData, 0, postData.Length);
            outputStreamPost.Close();
 
            var responsePost = requestPost.GetResponse() as HttpWebResponse;
            if (responsePost == null) return;
            var responseStreamPost = responsePost.GetResponseStream();
            if (responseStreamPost == null) return;
            responseStreamPost = responsePost.GetResponseStream();
            if (responseStreamPost == null) return;
            var readerPost = new StreamReader(responseStreamPost, Encoding.UTF8);
            var srcStringPost = readerPost.ReadToEnd();
            outputStreamPost.Close();
 
            //В ответе страница после успешной авторизации, т.е. видно все, что доступно авторизованному
            //Console.WriteLine(srcStringPost);
            //-------Авторизуемся------------------------------------------------------------------------------------------
 
            //Читаем страницу доступную авторизованному пользователю---------------------------------------------------------------------------------------------------
 
            const string uriNew = "https://b2b.ocs.ru/Orders/Requests.aspx";
 
            var requestNew = WebRequest.Create(uriNew) as HttpWebRequest;
            if (requestNew == null) return;
            requestNew.Method = "GET";
            requestNew.CookieContainer = myCookieContainer;
 
            var responseNew = requestNew.GetResponse() as HttpWebResponse;
            if (responseNew == null) return;
            var responseStreamNew = responseNew.GetResponseStream();
            if (responseStreamNew == null) return;
            var readerNew = new StreamReader(responseStreamNew, Encoding.UTF8);
            var srcStringNew = readerNew.ReadToEnd();
            Console.WriteLine(srcStringNew);


Спасибо всем принимавшим участие
0
22.03.2013, 06:59
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2013, 06:59
Помогаю со студенческими работами здесь

Передача данных после окна авторизации
Есть окно авторизации,которое после входа открывает вторую форму.На второй форме хочу вывести типа...

Парсинг данных после авторизации
Всем привет! У меня такая проблема: Есть сайт, с которого я хочу спарсить данные, доступные...

Как получить html после авторизации?
подскажите после авторизации на сайте нужно получить html страницы для дальнейшего парсинга делаю...

Получение кода веб-страници после авторизации
Собственно, проблема такая. Авторизуюсь на сайт так. HttpWebRequest request =...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru