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