C# Скачивание изображения из документа по url на litres.ru (Режим только чтение)

257
29 сентября 2017, 15:43

Здравствуйте! Недавно столкнулся с проблемой скачивания картинки с сайта litres.ru.

Есть некоторый url: .../pages/read_book_online/?file=15177364&page=0&rt=w640&ft=gif

Интерпретатор браузера воспринимает его как картинку и я хочу ее скачать, но возникла проблема, прямой ссылки на картинку (Gif) не существует. Т.е при попытке скачать картинку через HttpRequest (через Stream, HttpResponse и тп) или webclient.DownloadFile(url, "filename.gif") скачивается сама страница (ContentType = text/html). В браузере страница выглядит так:

Вопрос: Как можно скачать картинку по типу "лкм -> save as image"? Слышал про псевдобраузеры(поправьте если не так называю), которые грузят прямо api, симулируя работу настоящего браузера, и могут просчитывать все. Есть ли тогда что-то подобное в c#? Или есть другое решение? В общем случае мне нужно скачать уйму подобных страниц. Спасибо!

P.S Если не сложно, распишите поподробнее способ, думаю многим будет интересно:)

UPD: желательно без браузера из WindowsForms Запрос на получение картинки:

Answer 1

Решил проблему. Для получения Content-Type: image/gif, image/gif вместо text/html нужно ОБЯЗАТЕЛЬНО указать в Cookie SID (вот такая на litres.ru аунтификация:) ). Скачать книгу в Jpeg можно так:

        for (int i = 0; i < count; i++)
        {
            var bytes = web.DownloadData(name.Replace("page=", $"page={i}"));
            System.Drawing.Image img = System.Drawing.Image.FromStream(new MemoryStream(bytes));
            img.Save($"{path}/page{i}.jpg", ImageFormat.Jpeg);
        }
READ ALSO
Как использовать progress bar если много файлов на загрузку?

Как использовать progress bar если много файлов на загрузку?

Доброй ночи, подскажите как использовать ProgressBar при загрузке множества файловУ меня всегда разный список ссылок и программа узнает об этом...

259
Как узнать какая версия nuget установлена?

Как узнать какая версия nuget установлена?

Как узнать какая версия nuget установлена? Если просто ввести:

446
Зачем в Visual C# свойство Margin?

Зачем в Visual C# свойство Margin?

Зачем в Visual C# (использую Visual Studio 2017) у элементов управления свойство margin если вне зависимости от его значения можно свободно перемещать элементы...

249
Как узнать на каком экране сейчас запущено приложение?

Как узнать на каком экране сейчас запущено приложение?

Есть screensaver, и при запуске он открывает две копии приложения на количество мониторовМне необходимо чтоб некоторые функции на одном из мониторов...

193