Нужно получить на c# исходный текст html страницы

590
04 февраля 2017, 07:01

И на самом то деле задачка проста!

 static void Main(string[] args)
    {
        string text = GetCode("http://upakorel.ru/product-category/sv-valentin/");

        Console.WriteLine(text);
        Console.Read();
    }

    public static String GetCode(string urlAddress)
    {
        //string urlAddress = "http://google.com";
        string data = "";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        if (response.StatusCode == HttpStatusCode.OK)
        {
            Stream receiveStream = response.GetResponseStream();
            StreamReader readStream = null;
            if (response.CharacterSet == null)
            {
                readStream = new StreamReader(receiveStream);
            }
            else
            {
                readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
            }
             data = readStream.ReadToEnd();
            response.Close();
            readStream.Close();
        }
        return data;
    }

Но вместо html я получаю

<html><head><script>function set_cookie(){var now = new Date();var time = now.ge 
tTime();time += 19360000 * 1000;now.setTime(time);document.cookie='beget=begetok 
'+'; expires='+now.toGMTString()+'; path=/';}set_cookie();location.reload();;</s 
cript></head><body></body></html>

То есть какой то яваскрипт что ли - хз. Как мне получить настоящий исходный код страницы-как в браузере фаербагом.

Answer 1

В общем при первом запросе, т.к. у вас отсутствуют Cookie они вам устанавливаются с помощью JavaScript, нужно перед отправкой request установить их самостоятельно

string data = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
Cookie cookie = new Cookie
{
    Name = "beget",
    Value = "begetok"
};
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(new Uri(urlAddress), cookie);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Answer 2

Это настоящий HTML, сайт загружается в два захода. Первый раз выполняется скрипт JS, который проставляет куки set_cookie() и перезагружает страницу location.reload(). Когда вы пытаетесь получить страницу без перезагрузки, то никаких кук нет и перезагрузку с ними Вы не делаете.

Добавьте куки и будет Вам счастье.

if (request.CookieContainer == null)
{
    request.CookieContainer = new CookieContainer();
}
request.CookieContainer.Add(new Uri(urlAddress), new Cookie("beget","begetok"));
READ ALSO
Клиент IMAP работающий через прокси

Клиент IMAP работающий через прокси

Доброго времени суток, сейчас нахожусь в поисках IMAP клиента, который бы поддерживал работу через прокси и был бесплатнымГугл достаточно...

491
Breakpoint если программа зажралась

Breakpoint если программа зажралась

Хочу поставить условный breakpoint, который сработает, если программа съела слишком много памятиПопытался прописать такое в условие:

411
Как сбросить значения по умолчанию для составных свойств в PropertyGrid?

Как сбросить значения по умолчанию для составных свойств в PropertyGrid?

У меня есть класс со свойствами в качестве объектов каких-то еще классовНапример:

352
Регулярное выражение для ФИО

Регулярное выражение для ФИО

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

512