使用HttpWebRequest下载经过重定向的文件

来源:未知 责任编辑:责任编辑 发表时间:2015-03-01 01:47 点击:

使用 req.AllowAutoRedirect = true; 可以直接下载到文件,但不能得到文件名,通过使用req.AllowAutoRedirect = false;得到响应的Location,从而可以得到所请求的真实地址,也就可以得到文件名了。下面的代码可以进行下载到真实的文件名。需要注意的是,后面的req.AllowAutoRedirect = true;必须设置为 true,如果设置为false,则不能下载到完整的文件。

C# 代码
string Cookie = String.Empty;
String url = "http://search.patentstar.com.cn/cprs2010/Docdb/GetBns.aspx?PNo=APP201180002436";
String refer = url.Substring(0, url.LastIndexOf("/") + 1);
System.Net.HttpWebRequest req = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
req.AllowAutoRedirect = false;
req.Referer = refer;
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
System.Net.HttpWebResponse res = req.GetResponse() as System.Net.HttpWebResponse;
System.Net.WebHeaderCollection headers = res.Headers;
String newUrl = "";
if ((res.StatusCode == System.Net.HttpStatusCode.Found) ||
  (res.StatusCode == System.Net.HttpStatusCode.Redirect) ||
  (res.StatusCode == System.Net.HttpStatusCode.Moved) ||
  (res.StatusCode == System.Net.HttpStatusCode.MovedPermanently))
{
  newUrl = headers["Location"];
  newUrl = newUrl.Trim();
}

if (headers["Set-Cookie"] != null)
{
  Cookie = headers["Set-Cookie"];
}

NameValueCollection collHeader = new NameValueCollection();
if (Cookie.Length > 0)
{
  collHeader.Add("Cookie", Cookie);
}
res.Close();
req = null;
   
String fileName = newUrl.Substring(newUrl.LastIndexOf("/") + 1);
req = System.Net.HttpWebRequest.Create(newUrl) as System.Net.HttpWebRequest;
req.AllowAutoRedirect = true;
req.Referer = url;
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
res = req.GetResponse() as System.Net.HttpWebResponse;
           
System.IO.Stream stream = res.GetResponseStream();
byte[] buffer = new byte[32 * 1024];
int bytesProcessed = 0;
System.IO.FileStream fs = System.IO.File.Create(Server.MapPath(fileName));
int bytesRead;
do
{
  bytesRead = stream.Read(buffer, 0, buffer.Length);
  fs.Write(buffer, 0, bytesRead);
  bytesProcessed += bytesRead;
}
while (bytesRead > 0);
fs.Flush();
fs.Close();
res.Close();
Response.Write("文件 " + fileName +  " 已经下载完成。");


作者 孟宪会
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 浅析.NET下XML数据访问新机制
    • asp.net 面试+笔试题目第1/2页
    • C# 邮件地址是否合法的验证
    • asp.net 设置GridView的选中行的实现代码
    • C#高级编程:数据库连接[1]
    • ASP.NET GridView列表代码示例
    • 经典C++程序1
    • 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transforma
    • 微软ASP.NET站点部署指南(2):部署SQL Server Compact数据库
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索 - 移动版 - 返回顶部
    Copyright © 2008-2013 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1