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");
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д