程序用伪链进行下载
今天在做资源抓取程序时遇到一个问题,用于下载资源的url并不是资源的真实url,在浏览器中点击,可以下载,但用代码下载回来的东西是一堆html源码。
后来设置了http referer,下载正常了。
1,HttpWebRequest下载
Encoding encode = Encoding.GetEncoding(pagecode);
//请求URL
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Referer = url;//referer的作用是签定用户是从何处引用连接的, 很多网站都是通过这个referer来防止盗链
//设置超时(10秒)
req.Timeout = 10000;
//获取Response
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
//创建StreamReader与StreamWriter文件流对象
StreamReader sr = new StreamReader(rep.GetResponseStream(), encode);
StreamWriter sw = new StreamWriter(filename, false, encode);
//写入内容
sw.Write(sr.ReadToEnd());
//清理当前缓存区,并将缓存写入文件
sw.Flush();
//释放相关对象资源
sw.Close();
sw.Dispose();
sr.Close();
sr.Dispose();
2,System.Net.WebClient 下载
public void DownFile(string url, string filepath)
{
try
{
WriteLog("filepath:" + filepath + " 下载" + url + "开始");
client.Headers.Add("Referer", url);//referer的作用是签定用户是从何处引用连接的, 很多网站都是通过这个referer来防止盗链
client.DownloadFile(url, filepath);
WriteLog("filepath:" + filepath + " 下载" + url + "结束");
}
catch (Exception ex)
{
WriteLog("getSource请求" + url + "发生了异常:" + ex.ToString());
}
}