Мне нужно загрузить файл с веб-сайта (не написанный мной). У меня есть действительное имя пользователя/пароль для доступа к нему, и я могу сделать это вручную. Но я хочу создать автоматическую процедуру (в С#) для ее периодической загрузки.
Вручную мне нужно войти в систему, перейти на страницу загрузки, выбрать комбо-поле и нажать "Загрузить". Эта ссылка выполняет обратную передачу и возвращает запрошенный файл.
Я думаю, что я должен использовать WebClient.DownloadFile, но я не могу понять, как передать все необходимые данные и запросить обратную передачу правильно.
У этого другого веб-сайта есть API?
В противном случае вам нужно будет сделать веб-запрос, отправив все детали в нужном формате, затем прочитайте ответ, затем автоматически заполните вторую форму, чтобы "проверить комбо-поле", а затем, наконец, прочитайте ответ, содержащий файл,
Кроме того, там есть программное обеспечение эмуляции браузера, такое как селен, который используется для тестирования веб-сайта. Вы могли бы установить там тест/скрипт, который сделает все вышеперечисленное для вас. Я не уверен, как это обрабатывает загруженные файлы.
Если вы хотите сделать маршрут 1, будьте готовы изменить свою программу каждый раз, когда изменится другой веб-сайт. И если они добавляют капчу, то вы довольно сильно ввернуты.
Для удобства, сохраненный пароль в веб-браузере не спасет вас от большинства проблем?
Вы бы сделали что-то вроде этого:
HttpWebRequest request = WebRequest.Create(@"http://stackoverflow.com") as HttpWebRequest;
request.Credentials = NetworkCredentials(@"username", @"password");
request.Timeout = 300;
if(string.IsNullOrEmpty(request))
throw new Exception("Error in Request");
using(var stream = request.GetResponse().GetResponseStream())
using(var writer = File.Create(Environment.GetFolderPath(Environment.SpecialFolder.Desktop))
stream.CopyTo(writer);
Вы должны использовать NetworkCredentials
для передачи их на сайт. После создания HttpWebRequest
вы сможете получить доступ к множеству функций.