asp.net 需要登陆的网站上下载网页源代码和文件

  这个是文件下载类:

  

复制代码 代码如下:

  using System;

  using System.IO;

  using System.Net;

  using System.Web;

  public class SRWebClient

  {

  CookieContainer cookie;

  public SRWebClient()

  {

  cookie = new CookieContainer();

  }

  /// <TgData>

  /// <Alias>下载Web源代码</Alias>

  /// </TgData>

  public string DownloadHtml(string URL)

  {

  HttpWebRequest request = HttpWebRequest.Create(URL) as HttpWebRequest;

  request.CookieContainer = cookie;

  request.AllowAutoRedirect = false;

  WebResponse res = request.GetResponse();

  string r = "";

  StreamReader S1 = new StreamReader(res.GetResponseStream(), System.Text.Encoding.Default);

  try

  {

  r = S1.ReadToEnd();

  }

  catch (Exception er)

  {

  Log l = new Log();

  l.writelog("下载Web错误", er.ToString());

  }

  finally

  {

  res.Close();

  S1.Close();

  }

  return r;

  }

  /// <TgData>

  /// <Alias>下载文件</Alias>

  /// </TgData>

  public long DownloadFile(string FileURL, string FileSavePath)

  {

  long Filelength = 0;

  HttpWebRequest req = HttpWebRequest.Create(FileURL) as HttpWebRequest;

  req.CookieContainer = cookie;

  req.AllowAutoRedirect = true;

  HttpWebResponse res = req.GetResponse() as HttpWebResponse;

  System.IO.Stream stream = res.GetResponseStream();

  try

  {

  Filelength = res.ContentLength;

  byte[] b = new byte[512];

  int nReadSize = 0;

  nReadSize = stream.Read(b, 0, 512);

  System.IO.FileStream fs = System.IO.File.Create(FileSavePath);

  try

  {

  while (nReadSize > 0)

  {

  fs.Write(b, 0, nReadSize);

  nReadSize = stream.Read(b, 0, 512);

  }

  }

  finally

  {

  fs.Close();

  }

  }

  catch (Exception er)

  {

  Log l = new Log();

  l.writelog("下载文件错误", er.ToString());

  }

  finally

  {

  res.Close();

  stream.Close();

  }

  return Filelength;

  }

  /// <TgData>

  /// <Alias>提交数据</Alias>

  /// </TgData>

  public void Request(string RequestPageURL, RequestData Data)

  {

  string StrUrl = RequestPageURL;

  HttpWebRequest request = HttpWebRequest.Create(StrUrl) as HttpWebRequest;

  HttpWebResponse response;

  string postdata = Data.GetData();

  request.Referer = RequestPageURL;

  request.AllowAutoRedirect = false;

  request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 5.0)";

  request.CookieContainer = cookie;

  Uri u = new Uri(StrUrl);

  if (postdata.Length > 0) //包含要提交的数据 就使用Post方式

  {

  //作为表单请求

  request.ContentType = "application/x-www-form-urlencoded";

  //方式就是Post

  request.Method = "POST";

  //把提交的数据换成字节数组

  Byte[] B = System.Text.Encoding.Default.GetBytes(postdata);

  request.ContentLength = B.Length;

  Stream SW = request.GetRequestStream(); //开始提交数据

  SW.Write(B, 0, B.Length);

  SW.Close();

  }

  response = request.GetResponse() as HttpWebResponse;

  response.Close();

  }

  }

  这个是提交的数据类:

  

复制代码 代码如下:

  using System.Collections;

  using System.IO;

  public class RequestData

  {

  ArrayList arr = new ArrayList();

  public RequestData()

  {

  }

  public string GetData()

  {

  string r = "";

  for (int i = 0; i < arr.Count; i++)

  {

  data d = (data) arr[i];

  if (r.Length > 0)

  r += "&";

  r += d.Field + "=" + d.Value;

  }

  return r;

  }

  public void AddField(string Field, string Value)

  {

  data a = new data();

  a.Field = Field;

  a.Value = Value;

  arr.Add(a);

  }

  struct data

  {

  public string Field, Value;

  }

  }

  代码贴完了,下面是测试代码,因为有些数据涉及到客户的资料,故隐去

  

复制代码 代码如下:

  using NUnit.Framework;

  [TestFixture]

  public class TestWeb

  {

  [Test]

  public void testDownSEOrder()

  {

  RequestData data = new RequestData();

  data.AddField("name", "abc");

  data.AddField("password", "121");

  SRWebClient web = new SRWebClient();

  web.Request("http://127.0.0.1/login.asp", data);

  string s = web.DownloadHtml("http://127.0.0.1/dingdan.asp");

  System.Console.WriteLine(s);

  }

  [Test]

  public void testDownFile()

  {

  RequestData data = new RequestData();

  data.AddField("name", "aaa");

  data.AddField("password", "bbb");

  SRWebClient web = new SRWebClient();

  web.Request("http://127.0.0.1/login.asp", data);

  web.DownloadFile("http://127.0.0.1/download.asp?fileid=1", @"c:\a.txt");

  }

  }