基于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 "";

        }

posted @   94cool  阅读(251)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
< 2011年8月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10
点击右上角即可分享
微信分享提示