GET запрос для скачивания трека - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Недавно начал изучать C#. Решил написать маленькую прогу для скачивания трека(а потом и всех треков на странице) с этого сайта vmuzike.net(не реклама). Вроде бы все просто: ищем в ХТМЛ коде ссылку на трек и качаем. Но сайт выдает ссылку только ответом на GET запрос. Хромом отловил сам запрос и ответ. Ссылка лежит в заголовке Location. Т.е. задача сводится к: отправить ГЕТ-запрос, получить ответ и по значению заголовка Location скачать файл. Однако нужный ответ не приходит. Сам код:
private void button2_Click(object sender, EventArgs e)
        {
            CookieContainer cc = new CookieContainer();
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Url); //Url = ссылка на любую песню. [url]http://vmuzike.net/download/105492[/url], например.
            req.CookieContainer = cc;
            req.AllowAutoRedirect = false;
            req.UserAgent = "Chrome/39.0.2171.65";
            req.Referer = "http://vmuzike.net/";
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
            req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
            req.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
 
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            
            string path = resp.Headers["Location"];
 
            textBox3.Text = path;
            resp.Close();
        }
В чем может быть проблема? Может быть я не так составил запрос? Отловленный ГЕТ запрос:
GET /download/105492 HTTP/1.1 Host: vmuzike.net Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Referer: http://vmuzike.net/search/a%20day%20to%20remember Accept-Encoding: gzip, deflate, sdch Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: _scd=3d56cbd4b2ca5791dbc4833f4ca5cac6; PHPSESSID=maglc19o6ki1mt8qmqgfjvfqf3; _ukey=56e863e53ae37696a15d1db01259f7dc; _ga=GA1.2.1137599438.1416749029; _gat=1; player_volume=100; _ym_visorc_7892233=b
и ответ:
HTTP/1.1 302 Found Server: nginx/1.6.0 Date: Thu, 27 Nov 2014 15:45:46 GMT Content-Type: text/html Content-Length: 0 Connection: keep-alive X-Powered-By: PHP/5.5.9-1ubuntu4.5 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Location: http://n2.vmuzike.net/b/2a4be9796fff...MzI0MjM3MH0%3D

Решение задачи: «GET запрос для скачивания трека»

textual
Листинг программы
 private void button2_Click(object sender, EventArgs e)
        {
            HttpWebRequest reqCookie = (HttpWebRequest)HttpWebRequest.Create(Url);  // Запрос
            reqCookie.CookieContainer = new CookieContainer();                     // на
            HttpWebResponse respCookie = (HttpWebResponse)reqCookie.GetResponse();// получение
            respCookie.Close();                                                  //куки
            
            string cookie = Convert.ToString(respCookie.Cookies[1]); //1 - индекс именно того кука, который нужен
 
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Url); // Сам запрос
            req.Headers.Add("Cookie", cookie); //с куками
            req.AllowAutoRedirect = false;
 
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            resp.Close();
            string path = resp.Headers["Location"];
            Uri url = new Uri(path); 
            using (WebClient client = new WebClient())
            {
                client.DownloadFileAsync(url, "C:\\Users\\PC\\Desktop\\song.mp3");
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5