Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2015, 21:58   #11
krabich
Пользователь
 
Регистрация: 12.10.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Я б WebClient использовал вместо HttpWebRequest, там достаточно установить свойство Encoding, ну и вообще меньше кода писать.

Вот простой наследник WebClient с CookieContainer'ом если что https://gist.github.com/AlexP11223/e814a5ef8e741ead1632

И вместо регекспов для парсинга HTML обычно гораздо проще использовать HtmlAgilityPack (XPath).
Учту Ваш вариант, попробую переписать под WebClient.

Добавил Headers:
Cache-Control max-age=0
Origin https://my.life.ua
Upgrade-Insecure-Requests 1

и с 1 раза всё запустилось.
Подозрительно, но пока работает. Время покажет.

Оказалось, причиной успешного запуска служит HTTPAnalyzer Stand-alone для мониторинга трафика. Стоит мне её выключить и в ответ я получаю кракозябры вместо текста, включаю - и получаю ответ. При этом программа должна мониторить именно мою программу(или весь трафик), если установить мониторинг только firefox(допустим), выйдет ошибка.

Причина в этом на все 100%. 10 раз проверил. Как это возможно?

Цитата:
Сообщение от krabich Посмотреть сообщение
Оказалось, причиной успешного запуска служит HTTPAnalyzer Stand-alone для мониторинга трафика. Стоит мне её выключить и в ответ я получаю кракозябры вместо текста, включаю - и получаю ответ. При этом программа должна мониторить именно мою программу(или весь трафик), если установить мониторинг только firefox(допустим), выйдет ошибка.

Причина в этом на все 100%. 10 раз проверил. Как это возможно?
И программа и браузер получали одинаковые размеры страниц. Обе задикированы G-Zip. Вот только браузер умеет его принимать, а моя программа нет. Каким-то образом HttpAnalyzer помимо анализа ещё и умудрялся декодировать полученную информацию, поэтому при запущенном нём всё работало.

Изменил заголовок
Код:
wreq.Headers.Add("Accept-Encoding", "gzip,deflate");
на
Код:
wreq.Headers.Add("Accept-Encoding", "");
и всё заработало.


Всем спасибо, плюсики в карму.

PS: Простую авторизацию под WebClient переписал, на 4 строчки меньше кода.
А эту, с Кукисами всё сложно, поэтому оставил как есть.

Топ можно закрывать, вряд ли авторизация на этом специфическом(особенно для России) кому-то понадобится.

Последний раз редактировалось Stilet; 09.12.2015 в 14:12.
krabich вне форума Ответить с цитированием
Старый 09.12.2015, 10:35   #12
krabich
Пользователь
 
Регистрация: 12.10.2013
Сообщений: 15
По умолчанию

Проблема с получением данных с сайта МТС Украина.
Авторизация прошла успешно.

Изображение 1 - Иерархия. Кликнуть на стрелочку, потом еще раз кликнуть на стрелочку, потом ПКМ по вышедшему пункту -> Информация о ЛС(не указано на скрине)

Изображение 2 - Непосредственно информация о Лицевом счёте

Изображение 3 - Http Analyzer.


В Анализере отобразились открытия веток и непосредственно обращения к Лиц. счёту(успешное, через браузер).
В программе не вижу смысла кликать по виртуальным стрелочкам. Поэтому сразу перехожу к запросу.
Сравнить его не могу, т.к. сервер меня "не слушает" и у меня проходит тайм-аут запроса.

Авторизация пропущена, слишком много кода.
Код:
HttpWebRequest wreqs = (HttpWebRequest)WebRequest.Create("https://manager.mts.ua/Ncih/ObjectInfo.mvc/PersonalAccount");
            wreqs.CookieContainer = cc;
            wreqs.Accept = "*/*";
            wreqs.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:41.0) Gecko/20100101 Firefox/41.0";
            wreqs.Method = "POST";
            wreqs.Host = "manager.mts.ua";
            wreqs.Referer = "https://manager.mts.ua/Ncih/Hierarchy.mvc";
            wreqs.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
            wreqs.KeepAlive = true;
            wreqs.Headers.Add("Accept-Encoding", "gzip");
            wreqs.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
            wreqs.Headers.Add("X-Requested-With"," XMLHttpRequest");
            wreqs.Headers.Add("Pragma", "no-cache");
            wreqs.Headers.Add("Cache-Control", "no-cache");
            wreqs.AutomaticDecompression = DecompressionMethods.GZip;
            string mts_POST_s = "objectId=1090059&__LOCAL_DATETIME__="+ DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssz").Replace(":","%3A").Replace("+","%2B"); //Обновлено 10:20 MSK. Спасибо, Пепел Феникса!
            if (wreqs.Method.Equals("POST"))
            {
                byte[] EncodedPostParams3 = Encoding.UTF8.GetBytes(mts_POST_s);
                wreqs.ContentLength = EncodedPostParams3.Length;
                wreqs.GetRequestStream().Write(EncodedPostParams3, 0, EncodedPostParams3.Length); //TimeOut запроса :((
                wreqs.GetRequestStream().Close();
            }

            HttpWebResponse wress = (HttpWebResponse)wreqs.GetResponse();
Надеюсь на Вашу помощь, форум!
Спасибо!

Александр.

Последний раз редактировалось krabich; 09.12.2015 в 11:20.
krabich вне форума Ответить с цитированием
Старый 09.12.2015, 11:09   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

стандартное кодирование URL.
там 08:09:42+2
Код:
"__LOCAL_DATETIME__="+DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssz").Replace(":","%3A").Replace("+","%2B");
в лоб решается так.
(хотя такое меня не радует, правильнее делать иначе)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.12.2015, 11:15   #14
krabich
Пользователь
 
Регистрация: 12.10.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
стандартное кодирование URL.
там 08:09:42+2
Код:
"__LOCAL_DATETIME__="+DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssz").Replace(":","%3A").Replace("+","%2B");
в лоб решается так.
(хотя такое меня не радует, правильнее делать иначе)
Cпасибо!
Насчёт основного вопроса(тайм-аут запроса) есть предположения?
krabich вне форума Ответить с цитированием
Старый 09.12.2015, 13:58   #15
krabich
Пользователь
 
Регистрация: 12.10.2013
Сообщений: 15
По умолчанию

Счастья и здоровья человеку, который написал это: http://www.wadewegner.com/2007/08/sy...t-webrequests/

В частности:
"Fortunately, a co-worker stopped by and reminded me that, by design, there is a limit on the number of connections you can have to any given server. By default, this limitation is set to two!"

Закрыл оба предыдущих WebResponse и третий прошёл отлично.

Вопрос закрыт.
krabich вне форума Ответить с цитированием
Старый 09.12.2015, 14:00   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы до этого не освобождали ресурсы? О_О
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.12.2015, 14:59   #17
krabich
Пользователь
 
Регистрация: 12.10.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы до этого не освобождали ресурсы? О_О
Request закрывал, а про Response даже не подумал.
Теперь буду чаще мозг включать.

Спасибо ещё раз
krabich вне форума Ответить с цитированием
Старый 09.12.2015, 15:25   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

неудивительно, у вас же KeepAlive=true.
вообще любые ресурсы надо освобождать.
см RAII и using.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация на UCOZ с idHTTP.Post Stalkker247 Работа с сетью в Delphi 15 14.03.2012 13:34
Авторизация на vbulletin (POST) IndomiX Работа с сетью в Delphi 10 19.02.2012 21:11
https авторизация, обычный POST запрос не получается нужна какая дополнительная деталь temkas C# (си шарп) 1 06.12.2011 08:26
Post авторизация fenix19910 C# (си шарп) 0 21.07.2011 21:05
Хитрая авторизация на сайте метод post OkeaH Работа с сетью в Delphi 8 27.02.2009 19:49