0

Хай! Я хочу написать установщик, который будет скачивать файлы с Яндекс и Гугл Дисков. Код:

using System;
using System.Net;

namespace FileDownloading { class Program { static void Main(string[] args) { string url = "https://thumb.cloud.mail.ru/thumb/xw1/test.jpg"; string path = "E:\"; string name = "file.jpg";

        WebClient webClient = new WebClient();
        webClient.DownloadFile(url, path + name);
        Console.ReadLine();
    }
}

}

Программа возращает исключение с ошибкой 403 от сервера. В других ответах говорят, что это механизм защиты сервера и нужно прописать webClient.Headers.Add(); Но я новичок и не понимаю как это правильно сделать. Руководствуясь этим ответом пробовал перед запросом на загрузку добавлять строку:

webClient.Headers.Add("user-agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0");

Не помогло. Собственно вопрос: как правильно оформить Header`ы, чтобы они работали не только на моём устройстве?

NikMAX
  • 55
  • 1
  • WebClient давно является устаревшим. 2. С чего вы взяли, что облако даст просто так вам прямую ссылку? Попробуйте скачать в браузере, посмотрите, что он дает, попробуйте по этой ссылке скачать еще раз, каков будет результат? Предположу, что аналогичный тому, что видите сейчас через код.
  • – EvgeniyZ Jul 27 '21 at 15:18
  • @EvgeniyZ если вы о том, что эта ссылка не ведёт непосредственно на изображение, то на эти грабли я уже наступил и правил ссылку, это вроде как прямая ссылка, в браузере открывается тестовая картинка в новой вкладке. Или нужно получить ссылку, которая сразу создает в браузере загрузку? Что использовать вместо WebClient? – NikMAX Jul 27 '21 at 15:26
  • 2
    Нажмите в браузере Ctrl+Shift+N (или открыть новое приватное окно), там пройдите по ссылке, что увидите? Наверно "доступа нет", почему нет? Потому что не авторизованы тогда? Почему не авторизованы? Нету Cookie и других данных. – EvgeniyZ Jul 27 '21 at 15:35
  • @EvgeniyZ вы правы. Ошибка "NOT/AUTHORIZED". Тогда как правильно сформировать запрос на сервер? upd. Если использовать доступ по ссылке, то файл скачивается битый. – NikMAX Jul 27 '21 at 15:39
  • 2
    Анализируйте сайт, смотрите от куда он получает данные, как получает, что требует, пробуйте это отправить через Postman или аналог, смотрите на результат, как получите все необходимое, отправляйте все это через C#. Вот небольшой кусочек подобной авторизации яндекса, не факт, что сейчас там все тоже самое, но суть думаю поймете. Ну а вообще, найдите API и используйте его! Также из альтернативы, есть ресурсы, которые генерируют прямые ссылки на облачные файлы, но это такой себе вариант. – EvgeniyZ Jul 27 '21 at 16:11
  • 1
    @EvgeniyZ Ооо, заработало! Воспользовался сервисом для получения прямой ссылки, теперь работает как задумано. Дальше буду разбираться как обходится без него. Отдельная благодарность за ссылки, теперь я знаю что гуглить. Спасибо! – NikMAX Jul 27 '21 at 16:34