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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2017, 03:05   #1
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию Скачать файл с учетом авторизации C#

Здравствуйте. Есть страничка, с которой необходимо скачать файл, предварительно авторизовавшись. Я делаю это так:

Код:
string loginURI = "http://tr.anidub.com/anime_tv/anime_ongoing/10140-tiraniya-vooruzhennyh-devushek-busou-shoujo-machiavellianism-01-iz-12.html";
            string reqString = "login_name=my_login&login_password=my_pass&login=submit";
            byte[] requestData = Encoding.UTF8.GetBytes(reqString);

            var request = (HttpWebRequest)WebRequest.Create(loginURI);
            request.AllowAutoRedirect = true;
            request.Method = "POST";

            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = requestData.Length;
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            using (Stream S = request.GetRequestStream())
                S.Write(requestData, 0, requestData.Length);

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                var newPageCode = new StreamReader(response.GetResponseStream()).ReadToEnd();
            }
Если проверить содержимое переменной newPageCode, то там будет исходный код уже авторизованной записи, т.е. все работает. Но теперь встает другой вопрос: как скачать файл с этой страницы, сохраняя авторизацию? Я пытаюсь делать это так:

Код:
using (var response = (HttpWebResponse)request.GetResponse())
            {
                var newPageCode = new StreamReader(response.GetResponseStream()).ReadToEnd();
                string tor_url = "http://tr.anidub.com/engine/download.php?id=20776";
                webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Mobile Safari/537.36");
                webClient.Headers.Add(HttpRequestHeader.Referer, "http://tr.anidub.com/anime_tv/anime_ongoing/10140-tiraniya-vooruzhennyh-devushek-busou-shoujo-machiavellianism-01-iz-12.html");
                webClient.Headers.Add(HttpRequestHeader.Host, "tr.anidub.com");
                foreach (Cookie c in response.Cookies)
                {
                    webClient.Headers.Add(HttpRequestHeader.Cookie, c.ToString());
                }
                webClient.DownloadFile(new Uri(tor_url), disk.Text + "1.torrent");
                webClient.Dispose();
                
            }
Но так не работает... Что я делаю не так? Ну или может существует какой способ скачать файл, ссылка на который указана в переменной tor_url, используя HttpWebRequest / HttpWebResponse?
fanat_96 вне форума Ответить с цитированием
Старый 22.06.2017, 10:38   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

используйте тот же куки контейнер как минимум.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.06.2017, 11:30   #3
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
используйте тот же куки контейнер как минимум.
Каким образом?
Если написать
Код:
 webClient.Headers.Add(HttpRequestHeader.Cookie, cookieContainer);
То мне выдает ошибку...
И через тот же foreach перечислить содержимое контейнера не могу.
fanat_96 вне форума Ответить с цитированием
Старый 22.06.2017, 18:12   #4
fanat_96
Пользователь
 
Регистрация: 09.04.2016
Сообщений: 81
По умолчанию

Оказывается, элементы в webClient.Headers.Add записываются через запятую, а в куках они должны идти через точку с запятой, поэтому и не работало. Может кому пригодится решение:

Код:
using (WebClient webClient = new WebClient())
using (var response = (HttpWebResponse)request.GetResponse())
{
    var newPageCode = new StreamReader(response.GetResponseStream()).ReadToEnd();
    string tor_url = "http://tr.anidub.com/engine/download.php?id=20776";
    webClient.Headers.Add(HttpRequestHeader.Referer, "http://tr.anidub.com/anime_tv/anime_ongoing/10140-tiraniya-vooruzhennyh-devushek-busou-shoujo-machiavellianism-01-iz-12.html");
 
    string cookieHeader = "";
    foreach (Cookie c in response.Cookies)
    {
        cookieHeader += c + ";";
    }
    webClient.Headers.Add(HttpRequestHeader.Cookie, cookieHeader);
 
    webClient.DownloadFile(new Uri(tor_url), "1.torrent");
}
fanat_96 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показать сначала нужный файл, после авторизации - другой Hinc PHP 2 22.10.2016 18:05
Скачать файл KaDima28 JavaScript, Ajax 1 29.12.2014 07:41
curl: скачать файл WebbMan C/C++ Сетевое программирование 2 23.04.2011 15:21
Скачать файл... Romix Работа с сетью в Delphi 1 28.07.2010 09:37
Как скачать файл?! $T@LKER Работа с сетью в Delphi 6 06.05.2010 10:23