Я пытаюсь получить значок сайта, добавив "/favicon.ico" к домену
Я делаю запрос, получаю поток, преобразую его в поток памяти, а затем в изображение.Для большинства сайтов это работает отлично.Для этого у меня есть проблема: "https://www.7sur7.be/"
Попытка получить значок из https://www.7sur7.be/favicon.ico разрывов при преобразовании потока памяти в изображение, потому что поток заполнен страницей политики Cookies.
Ручной ввод этого адреса в браузере приводит к переходу на страницу политики использования файлов cookie, а затем к значку . Мне нужен запрос, распознаваемый как принимающий файлы cookie.
Вот кратчайший код, который я мог бы написать, чтобы выявить проблему.
public void Test()
{
var url = @"https://www.7sur7.be/favicon.ico";
//Try it with https://www.stackoverflow.com/favicon.ico and you'll end up with an Icon
var memStream = new MemoryStream();
Stream stream = GetStream(url);//defined below
byte[] buffer = new byte[1024];
int byteCount;
do
{
byteCount = stream.Read(buffer, 0, buffer.Length);
memStream.Write(buffer, 0, byteCount);
} while (byteCount > 0);
var img = Image.FromStream(memStream, true, true);
var bm = new Bitmap(img);
Icon ic = Icon.FromHandle(bm.GetHicon());
}
Вот оригинальный метод GetStream ():
private static Stream GetStream(string url)
{
WebRequest requestImg = WebRequest.Create(url);
WebResponse response = requestImg.GetResponse();
return response.GetResponseStream();
}
Вдохновленный этой SO публикацией , вот еще одна реализация GetStream ():
public Stream GetStream(string url)
{
CookieContainer cookieContainer = new CookieContainer();
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.CookieContainer = cookieContainer;
var response = (HttpWebResponse)httpWebRequest.GetResponse();
HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest2.CookieContainer = cookieContainer;
WebResponse response2 = httpWebRequest2.GetResponse();
return response.GetResponseStream();
}
Вдохновленная этой SO публикацией ,Вот еще одна попытка:
(класс CookieAwareWebClient в ссылке)
public void Test2()
{
var url = @"https://www.7sur7.be/favicon.ico";
//Try it with https://www.stackoverflow.com/favicon.ico and you'll end up with an Icon
var uri = new Uri(url);
var host = uri.Host;
CookieContainer cookieJar = new CookieContainer();
var cook = new Cookie("mycookie", "cookievalue", "/", host);
cookieJar.Add(cook);
CookieAwareWebClient client = new CookieAwareWebClient(cookieJar);
var bytes = client.DownloadData(url);
Icon icon;
using (MemoryStream ms = new MemoryStream(bytes))
{
icon = new Icon(ms);
}
}
Я пробовал другие решения, найденные здесь и там, и, похоже, ничего не работаетМожет ли кто-то заставить приведенный выше код работать? Окончательное решение должно быть переносимымтам компьютеры.Спасибо!