asp.net 需要登陆的网站上下载网页源代码和文件
asp.net 需要登陆的网站上下载网页源代码和文件
发布时间:2016-12-29 来源:查字典编辑
摘要:这个是文件下载类:复制代码代码如下:usingSystem;usingSystem.IO;usingSystem.Net;usingSyst...

这个是文件下载类:

复制代码 代码如下:

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");

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新asp.net教程学习
热门asp.net教程学习
编程开发子分类