Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2011, 16:54   #1
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию скачка файлов с авторизацией пользователя

значит моё приложение авторизируется на сайте. получает необходиму ссылку на файл. теперь его нужно скачать. проблема в том, что если качать по данной ссылке без авторизации то качается один и тот же файл с ошибкой. как получить файл с сайта с выполненной авторизацией, т.е. используя сохраненные ранее куки.

пробовал так, но как я и говорил качается файл ошибки.
Код:
WebClient myWebClient = new WebClient();
myWebClient.UseDefaultCredentials = true;
myWebClient.Proxy = new WebProxy("192.168.0.202", 3128);         
progressBar1.Value = 0;
progressBar1.Maximum = 100;
myWebClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(myWebClient_DownloadDataCompleted);
myWebClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(myWebClient_DownloadProgressChanged);
Uri uri = new Uri("http://mysite.ru/1.rar");
myWebClient.DownloadFileAsync(uri, "C:\\1.rar");
как прицепить сюда CookieContainer я не догадался
Life if about choices
Make the right choice

Последний раз редактировалось TaTT DoGG; 01.08.2011 в 16:56.
TaTT DoGG вне форума Ответить с цитированием
Старый 01.08.2011, 17:25   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Придется расширять WebClient
Код:
public class WebClientWithCookies : WebClient {
    private CookieContainer _cookies = new CookieContainer();
    public Cookies{set{_cookies=value;}get{return _cookies;}}
    protected override WebRequest GetWebRequest(Uri uri) {
        WebRequest request = base.GetWebRequest(uri);
        if (request is HttpWebRequest) {
            (request as HttpWebRequest).CookieContainer = _cookies;
        }
        return request;
    }
}
Пробовать что-то вроде:
Код:
WebClientWithCookies myWebClient = new WebClient();
myWebClient.UseDefaultCredentials = true;
myWebClient.Proxy = new WebProxy("192.168.0.202", 3128);         
progressBar1.Value = 0;
progressBar1.Maximum = 100;
myWebClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(myWebClient_DownloadDataCompleted);
myWebClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(myWebClient_DownloadProgressChanged);
Uri uri = new Uri("http://mysite.ru/1.rar");
myWebClient.DownloadFileAsync(uri, "C:\\1.rar");
Но за данный код ручаться не могу..))
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 01.08.2011 в 17:28.
Скарам вне форума Ответить с цитированием
Старый 01.08.2011, 19:38   #3
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

пробовал. тока нужноо ещё myWebClient.CookieContainer = сс; //cc мой контейнер с печеньками
либо этот код не работает, либодело не в печеньках. может реферер должен быть какой-нибудь
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 01.08.2011, 22:57   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Используй HTTPWebRequest, забудь про WebClient. HTTPWebRequest позволяет использовать куки. Как сделать закачку нагуглишь за 5 минут, чем ковыряться в ВебКлиенте.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 02.08.2011, 09:03   #5
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

да знаю )) меня в веб клиенте заманило удобство использования прогрессбара ))

UPD: разобрался. на сайте для корректной скачки нужны были не печеньки, а реферер. добавил
Код:
myWebClient.Headers.Add("Referer", refererurl);
и вроде стало качать нормально. потестим...
PS: про реферер додумался, когда делал через WebRequest. кстати через него тоже работало. но я видимо как-то криво читал поток и файлы скачивались битыми (например изображения).
Life if about choices
Make the right choice

Последний раз редактировалось TaTT DoGG; 02.08.2011 в 09:48.
TaTT DoGG вне форума Ответить с цитированием
Старый 02.08.2011, 12:06   #6
koc94ok
Новичок
Джуниор
 
Регистрация: 02.08.2011
Сообщений: 2
По умолчанию

А если картинку нужно скачать в pictureBox?
koc94ok вне форума Ответить с цитированием
Старый 02.08.2011, 12:42   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

поидее нужно сначало открыть поток, потом из потока грузить уже
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скачка файлов Shift_sk Помощь студентам 0 17.03.2011 23:44
Скачка файлов с http AquaKlaster Работа с сетью в Delphi 13 11.04.2010 10:27
Форма с авторизацией пользователя после появления главной формы r00xus Общие вопросы Delphi 7 14.01.2010 06:21
Скачка файлов из инета по очереди koyotfgthispass Работа с сетью в Delphi 17 24.12.2008 17:50
Работа с ФТП: Скачка файлов Horror Общие вопросы .NET 4 03.03.2008 14:50