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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2014, 21:05   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Как вытащить Html из под Хрома ?

Уважаемые, подскажите, как вытащить html код, аналогичный коду браузера ?

Использую следующий код:

Код:
HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create("http://yandex.ru/");
            HttpWebResponse webresp = (HttpWebResponse)webreq.GetResponse();

            webreq.Method = "GET";
            webreq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36";
            webreq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
            webreq.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            webreq.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            webreq.ContentType = "text/html; charset=utf-8";

            StreamReader stream = new StreamReader(webresp.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
            html = stream.ReadToEnd();
            stream.Close();
Просматриваю все Фидлером.
Код который открывается из браузера один, который из программы - другой.

Фидлер программу не видит, как браузер ... хотя вроде бы все прописал для этого

Может что не дописал, есть идеи ?

Последний раз редактировалось L6go1as; 11.04.2014 в 21:10.
L6go1as вне форума Ответить с цитированием
Старый 12.04.2014, 15:41   #2
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Хм, заметил еще вот что, если установить все куки, заголовки и т.д., то заместо html кода я получаю лишь:

Код:
�
Причем, посмотрев все, у программы с браузером лишь одно отличие - заголовок Keep-Alive отсутствует.

В чем прикол ?
L6go1as вне форума Ответить с цитированием
Старый 12.04.2014, 17:05   #3
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

javascript?
Lime вне форума Ответить с цитированием
Старый 12.04.2014, 17:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Код который открывается из браузера один, который из программы - другой.
То есть как так?
Может твоя программа не обрабатывает редирект сайта?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.04.2014, 17:31   #5
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Lime Посмотреть сообщение
javascript?
Да вроде бы нет.

Цитата:
Сообщение от Stilet Посмотреть сообщение
То есть как так?
Может твоя программа не обрабатывает редирект сайта?
Вот сам удивляюсь, но по ходу так оно и есть.
Если использовать IE10:
Код:
jsredir?from=yandex.ru%3Byandsearch%3Bweb%3B%3B
Если использовать Хром:
Код:
jsredir?from=yandex.ru%3Byandsearch%3Bweb%3B%3B%2Fweb%2Fitem%2Ftitle%2Cpos%2Cp0%2Csource%2Cweb_tdi&amp
*********

Я подозреваю что все дело в ответе который с сервера приходит, а именно в transfer-encoding: chunked

Но все бы ничего, вроде как ReadToEnd() должен читать до конца, все зависимости что в потоке.

Фидлер же показывает вот такую картинку:
Код:
5941
���������sו?�{�
��@�G7���KQ������T���Z�Pw�E�*Nf63�l�x=�[3�I<��Էjk�8v�8��*�/�_��s�@R��nf,�o߾���s���]��~��͍D��W�ӿ	���nC�2c���m��i�n���a[w<^�r�k:M���SI��a��8c
�z;�l��ue=��s9�;����}U���[o�1���݆� sw-�nF�g��hϰ��9�ʕ���`��=��F%�'��5фgy}s��������:��|��M��������AÞ���Ѥ���׸{�LM���N"�����=��s%��k�F}��(�a�q�%��h,
��_~z���G?<�2��K%�s̎��:����泬3� (и так далее ...)
Насколько я понимаю первая строка - кол-во кусов.
Кто ни будь сталкивался с таким ?
L6go1as вне форума Ответить с цитированием
Старый 12.04.2014, 18:07   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Кто ни будь сталкивался с таким ?
Я нет.
Цитата:
первая строка - кол-во кусов.
Скорее размер.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.04.2014, 16:42   #7
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Не могу сказать что разобрался, но ... нашел в чем возможно проблема.

Все упиралось в заголовок Keep-Alive и версию HTTP.

В версии HTTP/1.1 заголовок Keep-Alive по умолчанию идет как "true", т.е. поддерживает соединение, однако если прописать его WebRequest.KeepAlive = true, то с запросом он не уходил. И как итог мы натыкались на transfer-encoding: chunked, который присылал нам, лишь первую часть ответа и сервер закрывал соединение. Почему так происходит - не знаю, но куда интереснее становится дальше.

Если переключить версию HTTP/1.1 на HTTP/1.0, WebRequest.KeepAlive = true - работает, так как для этой версии его все же нужно было включать ручками.

Собственно, если чуть дописать код:

Код:
webreq.ProtocolVersion = HttpVersion.Version10;
webreq.KeepAlive = true;
Все работает как часы )
Единственное, я пока не проверял работает ли на последующих страницах, апосля переходов.
Вполне возможно, что в переходах наткнусь на transfer-encoding: chunked

Последний раз редактировалось L6go1as; 13.04.2014 в 16:54.
L6go1as вне форума Ответить с цитированием
Старый 13.04.2014, 18:49   #8
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Вот такой вопрос ... выполняю 2 запроса:
Код:
webwalker.getStarted(); // Первый запрос "GET"
string html = webwalker.Search_in(); // Второй запрос "GET"
Первый - заход на яндекс
Второй - переход в поиск

И почему-то второй запрос исполняется первым и лишь через какое-то время (пару сек) выполняется первый.

Почему так происходит ? Как сохранить очередность ?
L6go1as вне форума Ответить с цитированием
Старый 13.04.2014, 20:51   #9
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Как и ожидал, все переходы идут кусками ... увы и ах, как бороться с transfer-encoding: chunked, я так и не понял, однако!

Зачем же допускать компрессию изначально ?

Вносим изменения:
Код:
webrequest.Headers.Add("Accept-Encoding", "none");
И никаких танцев в бубном не нужны Однако страница грузится полностью, но если это не проблема, то you are welcome.
Надеюсь кому нить да поможет сие.
L6go1as вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вытащить цену из HTML taracqk C# (си шарп) 4 14.05.2013 18:50
Нужен движок под HTML MiLtoN5011 Помощь студентам 0 09.09.2012 22:55
Как через js передать переменную из ex1.html в ex2.html? Andrody JavaScript, Ajax 5 06.08.2012 11:23
Как вытащить ссылки из текста html marco.v Общие вопросы Delphi 11 17.08.2011 18:21
html-страничка под разными разрешениями Gamst Помощь студентам 3 09.06.2010 19:14