你可能会遇到过这样的情况,下载的视频很慢或者部分视频无法下载,下面就利用c#进行视频文件下载,只要你知道视频文件的路径和视频的格式就行了,这里不但是可以下载视频,其它文件也可以,如rar压缩文件等
代码如下:
/// <summary>
/// 下载视频
/// </summary>
/// <param name="url">视频网址路径</param>
/// <param name="Cheaturl">欺骗服务器的网址,可为null,
/// 对于一些网站没有下载权限就要设置,就是你是在哪个网页看到这个视频的网址</param>
/// <param name="DesPath">保存的路径(路径的文件名带后缀),如string DesPath = "D:\\text.mp4";</param>
public void DownLoad(string url,string Cheaturl,string DesPath) {
//指定http下载地址
HttpWebRequest resquest =(HttpWebRequest)WebRequest.Create(url);
//指定欺骗服务器下载地址
resquest.Referer = Cheaturl;
//复制下载流,并写入文件
using(HttpWebResponse response=(HttpWebResponse)resquest.GetResponse()){
if (response.StatusCode == HttpStatusCode.OK)
{
using(Stream stream=response.GetResponseStream()){
using(Stream fsStream=new FileStream(DesPath,FileMode.Create)){
byte[] buffer = new byte[1024*1024];
while (true)
{
int read = stream.Read (buffer, 0, buffer.Length);
if (read <= 0) break;
fsStream.Write(buffer, 0, read);
}
}
}
Console.WriteLine("下载完毕!!");
}
else {
Console.WriteLine("下载失败"+response.StatusCode);
}
}
}
2020年6月2日补充:
获取网站的html源码,新增POST方式的表单数据和设置代理IP(爬虫中使用到)
/// <summary>
/// 获取网页的源码
/// </summary>
/// <param name="url">网页url地址</param>
/// <param name="Method">POST或者GET</param>
/// <param name="formData">formData的数据,没有填null</param>
/// <returns></returns>
public string GetHtml(string url,string Method,Dictionary<string,string> formData)
{
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //加上这一句
Uri uri = new Uri(url);
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri);
myReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36";
myReq.Accept = "*/*";
myReq.KeepAlive = false;
myReq.AllowAutoRedirect = true;
myReq.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9");
myReq.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
myReq.Method =Method;
//设置代理IP
//string proxyIp ="ip地址";
//端口号
//int proxyPort = 7777;
//myReq.Proxy = new WebProxy(proxyIp, proxyPort);
//添加Form Data
if (formData != null&&formData.Count>0)
{
string formDataParam = "";
int index = 0;
foreach (var item in formData)
{
if (index == 0)
{
formDataParam += item.Key + "=" + item.Value;
index++;
}
else
{
formDataParam +="&"+item.Key + "=" + item.Value;
}
}
myReq.AllowWriteStreamBuffering = true;
byte[] buffer = Encoding.UTF8.GetBytes(formDataParam);
myReq.ContentLength = buffer.Length;
using (Stream requestStream = myReq.GetRequestStream())
{
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Flush();
}
}
HttpWebResponse result = (HttpWebResponse)myReq.GetResponse();
Stream receviceStream = result.GetResponseStream();
StreamReader readerOfStream = new StreamReader(receviceStream, System.Text.Encoding.GetEncoding("utf-8"));
string strHTML = readerOfStream.ReadToEnd();
readerOfStream.Close();
receviceStream.Close();
result.Close();
return strHTML;
}