Не удается перейти на страницу «Политика использования файлов cookie» при попытке получить значок сайта. - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь получить значок сайта, добавив "/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);
        }
    }

Я пробовал другие решения, найденные здесь и там, и, похоже, ничего не работаетМожет ли кто-то заставить приведенный выше код работать? Окончательное решение должно быть переносимымтам компьютеры.Спасибо!

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