本文共 3842 字,大约阅读时间需要 12 分钟。
一、C#下载实例二
1、测试入口
///2.其他方法定义:/// 可指定cookie的方式下载/// public static void Test2(){ string url = "http://v2.mukewang.com/98672526-02b5-454c-b31e-d8526755b40b/L.mp4?auth_key=1474171330-0-0-8ff3fe3a33cfd257577dfa999e41530d"; int currentSize = 0; //第一次请求处理 HttpWebRequest request = GetRequest(url, currentSize); //获取请求响应 HttpWebResponse resp = (HttpWebResponse)request.GetResponse(); string filename = GetFileName(url, resp); //创建写入流 FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write); //从响应流中持续读取并保存文件 int readCount = WriteFile(resp, fs); //关闭流 fs.Close(); Console.WriteLine("下载文件成功");}
////// 指定响应流,将响应流中的数据写入文件/// /// /// public static int WriteFile(HttpWebResponse resp, FileStream fs){ //将响应内容写入文件 Stream stream = resp.GetResponseStream(); //先读出,然后写入 byte[] bytes = new byte[1024 * 512]; int count = 0; int readCount = 0; //从相应流中读取到的文件大小 while ((count = stream.Read(bytes, 0, bytes.Length)) > 0) { //写入文件 fs.Write(bytes, 0, count); //清空 fs.Flush(); readCount += count; Console.WriteLine("本次读取:" + count); } stream.Close(); return readCount;}////// 指定连接地址,指定开始位置或结束位置请求文件内容/// public static HttpWebRequest GetRequest(string url, int start, int? end = null){ try { HttpWebRequest request = WebRequest.CreateHttp(url); request.Method = "GET"; request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36"; //request.Referer = "http://www.imooc.com/video/11555"; //添加cookie //request.Headers.Add("cookie", "imooc_uuid=ec12ea83-f2c0-4c14-9dd1-55fbefea18a0; imooc_isnew_ct=1468544598; loginstate=1; apsid=g2ZmJlMTE1MmExYWEwODE0ZTAzNTZmNjJmZDMzN2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjI2MDQ1NQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA3MTczMTMyQHFxLmNvbQAAAAAAAAAAAAAAAAAAAGQwOTNjNWUwNjA5MjI3ZDk5MjIxNzc3OWUwYTBlODEzk%2BK8V5PivFc%3DYj; last_login_username=1007173132%40qq.com; bdshare_firstime=1472599723791; PHPSESSID=gqgpva8utntcni03v2nkk69441; jwplayer.volume=100; imooc_isnew=2; cvde=57d5eee17b1e2-41; Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1473207620,1473291733,1473638111,1473809917; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1473814335; IMCDNS=0"); request.Headers.Add("Accept-Encoding", "identity;q=1, *;q=0"); request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); request.KeepAlive = true; if (end != null) request.AddRange(start, end.Value); else request.AddRange(start); request.Headers.Add("If-None-Match", "56f105a0-33c14ce"); request.Headers.Add("Cache-Control", "max-age=0"); request.IfModifiedSince = DateTime.Now; return request; } catch (Exception ex) { throw new Exception("创建请求失败:" + ex.Message); }}////// 获取下载文件名称,根据Mime类型设置/// private static string GetFileName(string url, HttpWebResponse resp){ Uri uri = new Uri(url); string filename = uri.AbsolutePath.Substring(uri.AbsolutePath.LastIndexOf("/") + 1); filename = LocalPathHelper.CurrentSolution + "/data/" + filename; if (filename.Contains(".") == false && string.IsNullOrEmpty(resp.ContentType) == false) { string content = resp.ContentType.ToLower(); if (content.Contains("text/plain")) { filename += ".txt"; } else if (content.Contains("text/html")) { filename += ".html"; } else if (content.Contains("application/json")) { filename += ".json"; } } //测试使用删除已经存在的文件 if (File.Exists(filename)) File.Delete(filename); return filename;}
转载地址:http://ifogi.baihongyu.com/