Программа загрузки файлов с веба.
Необходимые библиотеки:
//Классы для работы с сетью, в том числе и HTTP
using System.Net;
Об интерфейсе говорить я не буду, т.к. все сможете увидеть в исходниках.
необходимые переменные
//Переменная со ссылкой на файл, который будем скачивать
string file_url = "http://www.bestwallpapers.net.ru/private/img/space/017_Space_bestwall.jpg";
//Полный путь к директории, куда будем скачивать (вместе с названием файла)
string saving_path = @"E:\downloaded_image.jpg";
метод загрузки файла
private void Downloader()
{
//создаем класс для работы с HTTP
using (WebClient wClient = new WebClient())
{
//Статус загрузки
label2.Text = "Скачивание…";
//Ссылка на скачивание
Uri url = new Uri(file_url);
//Начинаем асинхронную загрузку файла
wClient.DownloadFileAsync(url, saving_path);
//Добавляем события: событие завершения загрузки и событие изменения прогресса закачки.
wClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCompleted);
wClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
}
}
И обработчики событий
Прогресс загрузки изменен
public void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
//Обновляем прогрессбар
dl_progress.Value = e.ProgressPercentage;
}
Загрузка завершена
public void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
label2.Text = "Загрузка завершена.";
}
С закачкой файлов все. Остальное завтра напишу.
Теперь давайте научимся делать POST запросы и при этом сохранять сессию. Делать запросы будем сюда http://frozzeg.no-ip.info/post.php.
Скрипт на этой странице принимает 2 параметра, login и password, а параметр do_login остается пустым, по этому строка POST запроса будет выглядеть так:
login=User&password=nevermind&do_login=
Теперь перейдем к нашей программе.
Вначале подключаем две библиотеки
//Система ввода вывода
using System.IO;
//Работа с сетью
using System.Net;
Класс для хранения сессий
private CookieCollection Cooks = new CookieCollection();
И два метода
Авторизация
public string Request_Post()
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://frozzeg.no-ip.info/post.php");
// Разрешаем авторедирект
httpWebRequest.AllowAutoRedirect = true;
// Создаем для запроса новый контейнер для хранения сессий
httpWebRequest.CookieContainer = new CookieContainer();
// Следующие строки итак понятны
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
// Перед тем как заполнять поля формы, текст запроса конвертируем в байты
byte[] ByteQuery = System.Text.Encoding.ASCII.GetBytes("login=User&password=nevermind&do_login=");
// Длинна запроса (обязательный параметр)
httpWebRequest.ContentLength = ByteQuery.Length;
// Открываем поток для записи
Stream QueryStream = httpWebRequest.GetRequestStream();
// Записываем в поток (это и есть POST запрос(заполнение форм))
QueryStream.Write(ByteQuery, 0, ByteQuery.Length);
// Закрываем поток
QueryStream.Close();
// Объект с ответом сервера
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
// Присваиваем сессию
httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
if (httpWebResponse.Cookies != null)
{
// Добавляем сессию в наш контейнер для дальнейшего использования
Cooks.Add(httpWebResponse.Cookies);
}
// Открываем поток для чтения
Stream stream = httpWebResponse.GetResponseStream();
// Читаем из потока
StreamReader reader = new StreamReader(stream);
// Возвращаем результат запроса
return reader.ReadToEnd();
}
И запрос с использованием сохраненной ранее сессии
public string Request()
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://frozzeg.no-ip.info/post.php");
httpWebRequest.AllowAutoRedirect = true;
httpWebRequest.CookieContainer = new CookieContainer();
if (Cooks != null)
{
//Добавляем к нашему запросу ранее сохраненную сессию
httpWebRequest.CookieContainer.Add(Cooks);
}
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
if (httpWebResponse.Cookies != null)
{
//Обновляем сессию
Cooks.Add(httpWebResponse.Cookies);
}
Stream stream = httpWebResponse.GetResponseStream();
StreamReader reader = new StreamReader(stream);
return reader.ReadToEnd();
}
Писать я не умею и как излагать материал я не знаю, по этому просто решил написать и прокомментировать код.
А запрос GET я решил не рассматривать, т.к. в любом учебнике есть его примеры.