一个网站登录,然后下载网页源代码和文件的代码
最近有个项目需要从网络上下载网页信息和文件,并且需要登录后才能下载,所以做了个下载的通用类,供大家参考。
这个是文件下载类:
 using System;
using System;
 using System.Net;
    using System.Net;
 using System.Web;
    using System.Web;

 public class SRWebClient
    public class SRWebClient
 {
    {
 CookieContainer cookie;
        CookieContainer cookie;
 public SRWebClient()
        public SRWebClient()
 {
        {
 cookie=new CookieContainer();
            cookie=new CookieContainer();
 }
        }
 
    
 /// <TgData>
        /// <TgData>
 ///     <Alias>下载Web源代码</Alias>
        ///     <Alias>下载Web源代码</Alias>
 /// </TgData>
        /// </TgData>
 public string DownloadHtml(string URL)
        public string DownloadHtml(string URL)
 {
        {
 HttpWebRequest request=HttpWebRequest.Create(URL) as HttpWebRequest;
            HttpWebRequest request=HttpWebRequest.Create(URL) as HttpWebRequest;
 request.CookieContainer=cookie;
            request.CookieContainer=cookie;
 request.AllowAutoRedirect=false;
            request.AllowAutoRedirect=false;

 WebResponse res=request.GetResponse();
            WebResponse res=request.GetResponse();
 string r="";
            string r="";
 
                        
 System.IO.StreamReader S1 = new System.IO.StreamReader(res.GetResponseStream(), System.Text.Encoding.Default );
            System.IO.StreamReader S1 = new System.IO.StreamReader(res.GetResponseStream(), System.Text.Encoding.Default );
 try
            try
 {
            {
 r = S1.ReadToEnd();
                r = S1.ReadToEnd();
 }
            }
 catch(Exception er)
            catch(Exception er)
 {
            {
 Log l=new Log();
                Log l=new Log();
 l.writelog("下载Web错误",er.ToString());
                l.writelog("下载Web错误",er.ToString());
 }
            }
 finally
            finally
 {
            {
 res.Close();
                res.Close();
 S1.Close();
                S1.Close();
 }
            }
 
            
 return r;
            return r;
 }
        }
 
    
 /// <TgData>
        /// <TgData>
 ///     <Alias>下载文件</Alias>
        ///     <Alias>下载文件</Alias>
 /// </TgData>
        /// </TgData>
 public long DownloadFile(string FileURL,string FileSavePath)
        public long DownloadFile(string FileURL,string FileSavePath)
 {
        {
 long Filelength=0;
            long Filelength=0;
 HttpWebRequest req=HttpWebRequest.Create(FileURL) as HttpWebRequest;
            HttpWebRequest req=HttpWebRequest.Create(FileURL) as HttpWebRequest;
 
            
 req.CookieContainer=cookie;
            req.CookieContainer=cookie;
 req.AllowAutoRedirect=true;
            req.AllowAutoRedirect=true;
 
            
 HttpWebResponse res=req.GetResponse() as HttpWebResponse;
            HttpWebResponse res=req.GetResponse() as HttpWebResponse;
 System.IO.Stream stream=res.GetResponseStream();
            System.IO.Stream stream=res.GetResponseStream();
 try
            try
 {
            {
 Filelength=res.ContentLength;
                Filelength=res.ContentLength;
 
            
 byte [] b=new byte[512];
                byte [] b=new byte[512];

 int nReadSize=0;
                int nReadSize=0;
 nReadSize=stream.Read(b,0,512);
                nReadSize=stream.Read(b,0,512);
 
                
 System.IO.FileStream fs= System.IO.File.Create(FileSavePath);
                System.IO.FileStream fs= System.IO.File.Create(FileSavePath);
 try
                try
 {
                {
 while(nReadSize >0)
                    while(nReadSize >0)
 {
                    {
 fs.Write(b,0,nReadSize);
                        fs.Write(b,0,nReadSize);
 nReadSize=stream.Read(b,0,512);
                        nReadSize=stream.Read(b,0,512);
 }
                    }
 }
                }
 finally
                finally
 {
                {
 fs.Close();
                    fs.Close();
 }
                }
 }
            }
 catch(Exception er)
            catch(Exception er)
 {
            {
 Log l=new Log();
                Log l=new Log();
 l.writelog("下载文件错误",er.ToString());
                l.writelog("下载文件错误",er.ToString());
 }
            }
 finally
            finally
 {
            {
 res.Close();
                res.Close();
 stream.Close();
                stream.Close();
 }
            }
 
            
 return Filelength;
            return Filelength;
 }
        }
 
    
 /// <TgData>
        /// <TgData>
 ///     <Alias>提交数据</Alias>
        ///     <Alias>提交数据</Alias>
 /// </TgData>
        /// </TgData>
 public void Request(string RequestPageURL,RequestData Data)
        public void Request(string RequestPageURL,RequestData Data)
 {
        {
 string StrUrl=RequestPageURL;
            string StrUrl=RequestPageURL;
 HttpWebRequest request=HttpWebRequest.Create(StrUrl) as HttpWebRequest;
            HttpWebRequest request=HttpWebRequest.Create(StrUrl) as HttpWebRequest;
 HttpWebResponse response;
            HttpWebResponse response;

 string postdata=Data.GetData();
            string postdata=Data.GetData();
 request.Referer=RequestPageURL;
            request.Referer=RequestPageURL;
 request.AllowAutoRedirect=false;
            request.AllowAutoRedirect=false;
 request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 5.0)";
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 5.0)";
 request.CookieContainer = cookie;
            request.CookieContainer = cookie;
 
            
 Uri u=new Uri(StrUrl);
            Uri u=new Uri(StrUrl);
 
            
 if (postdata.Length > 0 ) //包含要提交的数据 就使用Post方式
            if (postdata.Length > 0 ) //包含要提交的数据 就使用Post方式
 {
            {
 request.ContentType = "application/x-www-form-urlencoded"; //作为表单请求
                request.ContentType = "application/x-www-form-urlencoded"; //作为表单请求
 request.Method = "POST";        //方式就是Post
                request.Method = "POST";        //方式就是Post

 //把提交的数据换成字节数组
                //把提交的数据换成字节数组
 Byte [] B = System.Text.Encoding.Default.GetBytes(postdata);
                Byte [] B = System.Text.Encoding.Default.GetBytes(postdata);
 request.ContentLength = B.Length;
                request.ContentLength = B.Length;

 System.IO.Stream SW = request.GetRequestStream(); //开始提交数据
                System.IO.Stream SW = request.GetRequestStream(); //开始提交数据
 SW.Write(B, 0, B.Length);
                SW.Write(B, 0, B.Length);
 SW.Close();
                SW.Close();
 }
            }
 
            
 response = request.GetResponse() as HttpWebResponse;
            response = request.GetResponse() as HttpWebResponse;
 response.Close();
            response.Close();
 }
        }


 }
    }
这个是提交的数据类:
 using System.Collections;
using System.Collections;
 using System.IO;
    using System.IO;

 public class RequestData
    public class RequestData
 {
    {
 ArrayList arr=new ArrayList();
        ArrayList arr=new ArrayList();
 public RequestData()
        public RequestData()
 {
        {
 
            
 }
        }
 
    
 public string GetData()
        public string GetData()
 {
        {
 string r="";
            string r="";

 for(int i=0;i<arr.Count;i++)
            for(int i=0;i<arr.Count;i++)
 {
            {
 data d=(data)arr[i];
                data d=(data)arr[i];
 if(r.Length>0)r+="&";
                if(r.Length>0)r+="&";
 r+=d.Field+"="+d.Value;
                r+=d.Field+"="+d.Value;
 }
            }
 return r;
            return r;
 }
        }
 
        
 public void AddField(string Field,string Value)
        public void AddField(string Field,string Value)
 {
        {
 data a=new data();
            data a=new data();
 a.Field=Field;
            a.Field=Field;
 a.Value=Value;
            a.Value=Value;
 
            
 arr.Add(a);
            arr.Add(a);
 }
        }

 struct data
        struct data
 {
        {
 public string Field,Value;
            public string Field,Value;
 }
        }


 }
    }
 using NUnit.Framework;
    using NUnit.Framework;
 
    
 [TestFixture]
    [TestFixture]
 public class TestWeb
    public class TestWeb
 {
    {
 [Test]
        [Test]
 public void testDownSEOrder()
        public void testDownSEOrder()
 {
        {
 RequestData data=new RequestData();
            RequestData data=new RequestData();
 data.AddField("name","abc");
            data.AddField("name","abc");
 data.AddField("password","121");
            data.AddField("password","121"); 

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

 string s=web.DownloadHtml("http://127.0.0.1/dingdan.asp");
            string s=web.DownloadHtml("http://127.0.0.1/dingdan.asp");
 System.Console.WriteLine(s);
            System.Console.WriteLine(s);
 }
        }
 [Test]
        [Test]
 public void testDownFile()
        public void testDownFile()
 {
        {
 RequestData data=new RequestData();
            RequestData data=new RequestData();
 data.AddField("name","aaa");
            data.AddField("name","aaa");
 data.AddField("password","bbb");
            data.AddField("password","bbb"); 
 
            
 SRWebClient web=new SRWebClient();
            SRWebClient web=new SRWebClient();
 web.Request("http://127.0.0.1/login.asp",data);
            web.Request("http://127.0.0.1/login.asp",data);

 web.DownloadFile("http://127.0.0.1/download.asp?fileid=1",@"c:\a.txt");
            web.DownloadFile("http://127.0.0.1/download.asp?fileid=1",@"c:\a.txt");
 
            
 }
        }
 }
    }
这个是文件下载类:
 using System;
using System; using System.Net;
    using System.Net; using System.Web;
    using System.Web;
 public class SRWebClient
    public class SRWebClient {
    { CookieContainer cookie;
        CookieContainer cookie; public SRWebClient()
        public SRWebClient() {
        { cookie=new CookieContainer();
            cookie=new CookieContainer(); }
        } 
     /// <TgData>
        /// <TgData> ///     <Alias>下载Web源代码</Alias>
        ///     <Alias>下载Web源代码</Alias> /// </TgData>
        /// </TgData> public string DownloadHtml(string URL)
        public string DownloadHtml(string URL) {
        { HttpWebRequest request=HttpWebRequest.Create(URL) as HttpWebRequest;
            HttpWebRequest request=HttpWebRequest.Create(URL) as HttpWebRequest; request.CookieContainer=cookie;
            request.CookieContainer=cookie; request.AllowAutoRedirect=false;
            request.AllowAutoRedirect=false;
 WebResponse res=request.GetResponse();
            WebResponse res=request.GetResponse(); string r="";
            string r=""; 
                         System.IO.StreamReader S1 = new System.IO.StreamReader(res.GetResponseStream(), System.Text.Encoding.Default );
            System.IO.StreamReader S1 = new System.IO.StreamReader(res.GetResponseStream(), System.Text.Encoding.Default ); try
            try {
            { r = S1.ReadToEnd();
                r = S1.ReadToEnd(); }
            } catch(Exception er)
            catch(Exception er) {
            { Log l=new Log();
                Log l=new Log(); l.writelog("下载Web错误",er.ToString());
                l.writelog("下载Web错误",er.ToString()); }
            } finally
            finally {
            { res.Close();
                res.Close(); S1.Close();
                S1.Close(); }
            } 
             return r;
            return r; }
        } 
     /// <TgData>
        /// <TgData> ///     <Alias>下载文件</Alias>
        ///     <Alias>下载文件</Alias> /// </TgData>
        /// </TgData> public long DownloadFile(string FileURL,string FileSavePath)
        public long DownloadFile(string FileURL,string FileSavePath) {
        { long Filelength=0;
            long Filelength=0; HttpWebRequest req=HttpWebRequest.Create(FileURL) as HttpWebRequest;
            HttpWebRequest req=HttpWebRequest.Create(FileURL) as HttpWebRequest; 
             req.CookieContainer=cookie;
            req.CookieContainer=cookie; req.AllowAutoRedirect=true;
            req.AllowAutoRedirect=true; 
             HttpWebResponse res=req.GetResponse() as HttpWebResponse;
            HttpWebResponse res=req.GetResponse() as HttpWebResponse; System.IO.Stream stream=res.GetResponseStream();
            System.IO.Stream stream=res.GetResponseStream(); try
            try {
            { Filelength=res.ContentLength;
                Filelength=res.ContentLength; 
             byte [] b=new byte[512];
                byte [] b=new byte[512];
 int nReadSize=0;
                int nReadSize=0; nReadSize=stream.Read(b,0,512);
                nReadSize=stream.Read(b,0,512); 
                 System.IO.FileStream fs= System.IO.File.Create(FileSavePath);
                System.IO.FileStream fs= System.IO.File.Create(FileSavePath); try
                try {
                { while(nReadSize >0)
                    while(nReadSize >0) {
                    { fs.Write(b,0,nReadSize);
                        fs.Write(b,0,nReadSize); nReadSize=stream.Read(b,0,512);
                        nReadSize=stream.Read(b,0,512); }
                    } }
                } finally
                finally {
                { fs.Close();
                    fs.Close(); }
                } }
            } catch(Exception er)
            catch(Exception er) {
            { Log l=new Log();
                Log l=new Log(); l.writelog("下载文件错误",er.ToString());
                l.writelog("下载文件错误",er.ToString()); }
            } finally
            finally {
            { res.Close();
                res.Close(); stream.Close();
                stream.Close(); }
            } 
             return Filelength;
            return Filelength; }
        } 
     /// <TgData>
        /// <TgData> ///     <Alias>提交数据</Alias>
        ///     <Alias>提交数据</Alias> /// </TgData>
        /// </TgData> public void Request(string RequestPageURL,RequestData Data)
        public void Request(string RequestPageURL,RequestData Data) {
        { string StrUrl=RequestPageURL;
            string StrUrl=RequestPageURL; HttpWebRequest request=HttpWebRequest.Create(StrUrl) as HttpWebRequest;
            HttpWebRequest request=HttpWebRequest.Create(StrUrl) as HttpWebRequest; HttpWebResponse response;
            HttpWebResponse response;
 string postdata=Data.GetData();
            string postdata=Data.GetData(); request.Referer=RequestPageURL;
            request.Referer=RequestPageURL; request.AllowAutoRedirect=false;
            request.AllowAutoRedirect=false; request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 5.0)";
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 5.0)"; request.CookieContainer = cookie;
            request.CookieContainer = cookie; 
             Uri u=new Uri(StrUrl);
            Uri u=new Uri(StrUrl); 
             if (postdata.Length > 0 ) //包含要提交的数据 就使用Post方式
            if (postdata.Length > 0 ) //包含要提交的数据 就使用Post方式 {
            { request.ContentType = "application/x-www-form-urlencoded"; //作为表单请求
                request.ContentType = "application/x-www-form-urlencoded"; //作为表单请求 request.Method = "POST";        //方式就是Post
                request.Method = "POST";        //方式就是Post
 //把提交的数据换成字节数组
                //把提交的数据换成字节数组 Byte [] B = System.Text.Encoding.Default.GetBytes(postdata);
                Byte [] B = System.Text.Encoding.Default.GetBytes(postdata); request.ContentLength = B.Length;
                request.ContentLength = B.Length;
 System.IO.Stream SW = request.GetRequestStream(); //开始提交数据
                System.IO.Stream SW = request.GetRequestStream(); //开始提交数据 SW.Write(B, 0, B.Length);
                SW.Write(B, 0, B.Length); SW.Close();
                SW.Close(); }
            } 
             response = request.GetResponse() as HttpWebResponse;
            response = request.GetResponse() as HttpWebResponse; response.Close();
            response.Close(); }
        }

 }
    }这个是提交的数据类:
 using System.Collections;
using System.Collections; using System.IO;
    using System.IO;
 public class RequestData
    public class RequestData {
    { ArrayList arr=new ArrayList();
        ArrayList arr=new ArrayList(); public RequestData()
        public RequestData() {
        { 
             }
        } 
     public string GetData()
        public string GetData() {
        { string r="";
            string r="";
 for(int i=0;i<arr.Count;i++)
            for(int i=0;i<arr.Count;i++) {
            { data d=(data)arr[i];
                data d=(data)arr[i]; if(r.Length>0)r+="&";
                if(r.Length>0)r+="&"; r+=d.Field+"="+d.Value;
                r+=d.Field+"="+d.Value; }
            } return r;
            return r; }
        } 
         public void AddField(string Field,string Value)
        public void AddField(string Field,string Value) {
        { data a=new data();
            data a=new data(); a.Field=Field;
            a.Field=Field; a.Value=Value;
            a.Value=Value; 
             arr.Add(a);
            arr.Add(a); }
        }
 struct data
        struct data {
        { public string Field,Value;
            public string Field,Value; }
        }

 }
    }代码贴完了,下面是测试代码,因为有些数据涉及到客户的资料,故隐去
 using NUnit.Framework;
    using NUnit.Framework; 
     [TestFixture]
    [TestFixture] public class TestWeb
    public class TestWeb {
    { [Test]
        [Test] public void testDownSEOrder()
        public void testDownSEOrder() {
        { RequestData data=new RequestData();
            RequestData data=new RequestData(); data.AddField("name","abc");
            data.AddField("name","abc"); data.AddField("password","121");
            data.AddField("password","121"); 
 SRWebClient web=new SRWebClient();
            SRWebClient web=new SRWebClient(); web.Request("http://127.0.0.1/login.asp",data);
            web.Request("http://127.0.0.1/login.asp",data);
 string s=web.DownloadHtml("http://127.0.0.1/dingdan.asp");
            string s=web.DownloadHtml("http://127.0.0.1/dingdan.asp"); System.Console.WriteLine(s);
            System.Console.WriteLine(s); }
        } [Test]
        [Test] public void testDownFile()
        public void testDownFile() {
        { RequestData data=new RequestData();
            RequestData data=new RequestData(); data.AddField("name","aaa");
            data.AddField("name","aaa"); data.AddField("password","bbb");
            data.AddField("password","bbb");  
             SRWebClient web=new SRWebClient();
            SRWebClient web=new SRWebClient(); web.Request("http://127.0.0.1/login.asp",data);
            web.Request("http://127.0.0.1/login.asp",data);
 web.DownloadFile("http://127.0.0.1/download.asp?fileid=1",@"c:\a.txt");
            web.DownloadFile("http://127.0.0.1/download.asp?fileid=1",@"c:\a.txt"); 
             }
        } }
    } 
                    
                     
                    
                 
                    
                
 
    
 
         
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号