基于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 "";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)