Несколько вопросов по Get-запросам и System.Net

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
528
Баллы
93
Есть два кода
Код:
return ZennoPoster.HttpGet(
    "https://mail.ru/", // url
    "", // proxy
    "UTF-8", // Encoding
    InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, //respType
    30000, // timeout
    "", // cookies
    project.Profile.UserAgent, // UserAgent
    true, // UseRedirect
    5, // MaxRedirectCount
    new string[] { // AdditionalHeaders
        "Accept: "+project.Profile.HTTPAccept + "",
        "Accept-Encoding: "+project.Profile.AcceptEncoding + "",
        "Accept-Language: "+project.Profile.AcceptLanguage + "",
    },
    "", // Downloadpath
    false // UseOriginalUrl
);
и
Код:
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string url = "https://mail.ru/";

// GET запрос
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = userAgent;
request.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3"); // если возвращаемые данные нужны на русском языке
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse) request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string resultGet = reader.ReadToEnd();
response.Close();
reader.Close();
return resultGet;
По факту суть этих кодов, как я понимаю одинакова. Оба делают гет-запрос по адресу майл.ру. Оба получает только тело в ответ, без заголовков. Только первый - это аналог стандартного кубика Get, второй - использует библиотеку System.Net.
Вопросы:
1. Почему так странно используются (прописывается) во втором коде это (System.Net.HttpWebRequest) и (System.Net.HttpWebResponse). С с# я немного знаком. Пишу коды в шаблонах, пользуюсь им. Но мне непонятно почему эти именно моменты нужно оборачивать в круглые скобки. При написании обычных кодов с элементами страницы (поиску, кликах и т.д.), при работах с датами, списками и таблицами я ранее не встречал такого, что нужно именно оборачивать в круглые скобки. Может кто прояснить подсказать, пожалуйста??
2. Что и как изменить нужно во втором коде, чтобы в ответ я получил и заголовки и тело (в первом коде я понимаю что нужно заменить BodyOnly на HeaderAndBody). Как это сделать именно во втором коде?
3. И третий вопрос. Почему все же ответы приходят разные от первого и второго кода? Они от одно сайта, и я вижу что суть у них одинакова. Но по сути - это 2 разных ответа. Они значительно отличаются по кол-ву строк, все ява скрипты разложены по-другому, и т.д. (т.е. отличия есть и еще).
Спасибо заранее, всем кто прояснит ситуацию!
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 602
Баллы
113
Есть два кода
Код:
return ZennoPoster.HttpGet(
    "https://mail.ru/", // url
    "", // proxy
    "UTF-8", // Encoding
    InterfacesLibrary.Enums.Http.ResponceType.BodyOnly, //respType
    30000, // timeout
    "", // cookies
    project.Profile.UserAgent, // UserAgent
    true, // UseRedirect
    5, // MaxRedirectCount
    new string[] { // AdditionalHeaders
        "Accept: "+project.Profile.HTTPAccept + "",
        "Accept-Encoding: "+project.Profile.AcceptEncoding + "",
        "Accept-Language: "+project.Profile.AcceptLanguage + "",
    },
    "", // Downloadpath
    false // UseOriginalUrl
);
и
Код:
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string url = "https://mail.ru/";

// GET запрос
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = userAgent;
request.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3"); // если возвращаемые данные нужны на русском языке
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse) request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string resultGet = reader.ReadToEnd();
response.Close();
reader.Close();
return resultGet;
По факту суть этих кодов, как я понимаю одинакова. Оба делают гет-запрос по адресу майл.ру. Оба получает только тело в ответ, без заголовков. Только первый - это аналог стандартного кубика Get, второй - использует библиотеку System.Net.
Вопросы:
1. Почему так странно используются (прописывается) во втором коде это (System.Net.HttpWebRequest) и (System.Net.HttpWebResponse). С с# я немного знаком. Пишу коды в шаблонах, пользуюсь им. Но мне непонятно почему эти именно моменты нужно оборачивать в круглые скобки. При написании обычных кодов с элементами страницы (поиску, кликах и т.д.), при работах с датами, списками и таблицами я ранее не встречал такого, что нужно именно оборачивать в круглые скобки. Может кто прояснить подсказать, пожалуйста??
2. Что и как изменить нужно во втором коде, чтобы в ответ я получил и заголовки и тело (в первом коде я понимаю что нужно заменить BodyOnly на HeaderAndBody). Как это сделать именно во втором коде?
3. И третий вопрос. Почему все же ответы приходят разные от первого и второго кода? Они от одно сайта, и я вижу что суть у них одинакова. Но по сути - это 2 разных ответа. Они значительно отличаются по кол-ву строк, все ява скрипты разложены по-другому, и т.д. (т.е. отличия есть и еще).
Спасибо заранее, всем кто прояснит ситуацию!
1. Это приведение типов. Объект создаётся WebRequest и приводится к HttpWebRequest. Такое часто встречается при математических операциях над целочисленными типа. Например, если поделить int на int, то мы получем тоже целое число, а дробь, если она есть, отброситься. Но если нужен результат вещественного типа, то перед делимым или делителем прописывают, например, (double) тем самым это целое уже идёт как вещественное число.
2. Заголовки хранятся в отдельном массиве. Их нужно самому из этого массива сформировать в ответ. По сути зенновские методы тоже написаны через System.Net, просто то обёртка для удобства пользователей с удобным функционалом
 
  • Спасибо
Реакции: evgen_po

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
528
Баллы
93
Заголовки хранятся в отдельном массиве. Их нужно самому из этого массива сформировать в ответ.
Не подскажешь как? Ведь мы и так вроде бы читаем весь ответ этим StreamReader, но заголовков там нет...
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 602
Баллы
113
  • Спасибо
Реакции: evgen_po

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)