基于HTTP协议下载的程序

public static string DownLoadFile(string fileURL)

        {

            StreamReader rdr = null;

            FileStream wrtr = null;

            string localFileName = string.Empty;

            try

            {

                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(fileURL);

                req.Method = "GET";

                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

                long len = resp.ContentLength;

                Stream respStream = resp.GetResponseStream();

                localFileName = @"\Program Files\" + fileURL.Substring(fileURL.LastIndexOf("/") + 1);

                wrtr = new FileStream(localFileName, FileMode.Create);

                byte[] inData = new byte[4096];

                int bytesRead = respStream.Read(inData, 0, inData.Length);

                while (bytesRead > 0)

                {

                    wrtr.Write(inData, 0, bytesRead);

                    bytesRead = respStream.Read(inData, 0, inData.Length);

                }

                //判断下在是否成功

                System.IO.FileInfo fi = new FileInfo(localFileName);

                if (fi.Length != len) localFileName = string.Empty;

                fi = null;

 

            }

            catch {}

           finally

            {

                if (rdr != null) rdr.Close();

                if (wrtr != null) wrtr.Close();

            }

            return localFileName;

  }

 

//自己封装头部

public string HttpDownload(string url)

        {

            try

            {

                url = url.ToLower().Replace("http://", "");

                int offset = url.IndexOf("/");

                string Host=url.Substring(0,offset);

                string file = url.Substring(offset);

 

                IPHostEntry IpHost = Dns.GetHostEntry(Host);

                Socket Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                IPEndPoint point = new IPEndPoint(IpHost.AddressList[0], 80);

                Sock.Connect(point);

 

                if (Sock.Connected)

                {

                    string strGet = "GET " + file + " HTTP/1.0\r\n" +

                            "Host:" + Host + "\r\n" +

                            "Accept:*/*\r\n" +

                            "User-Agent:GeneralDownloadApplication\r\n" +

                            "Connection:Keep-Alive\r\n\r\n";

                    Byte[] cmd = Encoding.Default.GetBytes(strGet.ToCharArray());

                    Sock.Send(cmd, cmd.Length, SocketFlags.None);

                    string strInfo = "";

                    for (int i = 0; i < 1000; i++)  //10s

                    {

                        if (Sock.Available > 0)

                        {

                            Byte[] bytes = new Byte[1024];

                            int intSize = Sock.Receive(bytes, 1024, 0);

                            strInfo += Encoding.Default.GetString(bytes, 0, intSize);

                            if (strInfo.IndexOf("HTTP/1.1 200 OK") == 0)

                            {

                                intSize = strInfo.IndexOf("\r\n\r\n");

                                if (intSize > 0)

                                {

                                    return strInfo.Substring(intSize + 4);

                                }

                            }

                        }

                        Thread.Sleep(10);

                    }

                }

            }

            catch { }

            return "";

        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值