Отключить загрузку изображений для HttpWebRequest

#c# #image #httpwebrequest #httprequest

#c# #изображение #httpwebrequest #httprequest

Вопрос:

Можно ли использовать веб-запрос для получения только текстовых данных с сайта? И если да, то как мне это сделать?

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

РЕДАКТИРОВАТЬ: это мой фрагмент кода:

             string baseUrl = kvPair.Value[0];
            string loginUrl = kvPair.Value[1];
            string notifyUrl = kvPair.Value[2];
            cc = new CookieContainer();
            string loginDetails = DataCollector.GetLoginDetails(baseUrl, ref cc);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginUrl);
            request.Method = "POST";
            request.Accept = "text/*";
            request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
            request.CookieContainer = cc;
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36";
            Byte[] data = Encoding.ASCII.GetBytes(loginDetails);
            request.ContentLength = data.Length;
            using (Stream s = request.GetRequestStream())
            {
                s.Write(data, 0, data.Length);
            }
            HttpWebResponse res = (HttpWebResponse)request.GetResponse();
            request = (HttpWebRequest)WebRequest.Create(notifyUrl);
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36";
            request.CookieContainer = cc;
            res = (HttpWebResponse)request.GetResponse();
            Stream streamResponse = res.GetResponseStream();
            using (StreamReader sr = new StreamReader(streamResponse))
            {
                ViewData["data"]  = "<div style="float: left; margin-bottom: 50px;">"   sr.ReadToEnd()   "</div>";
            }
  

Комментарии:

1. попробуйте установить для заголовка accept значение только text / html

2. Попробуйте установить свойство Accept .

3. @Crowcoder нет, это не сработало

4. Какое значение вы установили для Accept свойства? Поделитесь своим фрагментом кода, если это возможно.

5. @f.nasim адаптировали мой вопрос

Ответ №1:

Я нашел себе хорошее решение для кодирования:

 public static string StripImages(string input)
{
   return Regex.Replace(input, "<img.*?>", String.Empty);
}
  

это уничтожает все изображения, но только после того, как вы загрузили все изображения, поэтому в этом решении нет экономии передаваемых данных…

Ответ №2:

Раздел 14.1 определений полей заголовка HTTP / 1.1 содержит определение заголовка Accept. В нем указано следующее:

… Если присутствует поле заголовка Accept, и если сервер не может отправить ответ, который является приемлемым в соответствии с объединенным значением поля Accept, тогда сервер ДОЛЖЕН отправить 406 (неприемлемый) ответ.

Таким образом, сервер должен учитывать запрос клиента.

Я обнаружил, что большинство серверов игнорируют Accept заголовок. Пока я нашел только один exceptoin: это GitHub. Я запросил домашнюю страницу GitHub со звуком в качестве Accept параметра. И он ответил соответствующим образом с кодом ответа 406.

Попробуйте следующий фрагмент для демонстрации, вы должны получить System.Net.WebException: The remote server returned an error: (406) Not Acceptable.

 HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://github.com/");
request.Method = "GET";
request.Accept = "audio/*";

var response = request.GetResponse();