Здравствуйте. Есть страничка, с которой необходимо скачать файл, предварительно авторизовавшись. Я делаю это так:
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?
По-умолчанию элементы в заголовке при использовании метода webClient.Headers.Add
разделяются запятой, но для заголовка Cookie
элементы должны разделяться точкой с запятой.
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");
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня в компании есть библиотека с разными "кастомными" контролами для WPF"Кастомные", они лишь потому что там изменена визуальная составляющая,...