#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();