HTTP服务器上断点下载文件.doc
文本预览下载声明
HTTP服务器上断点下载文件
?从HTTP服务器上下载一个文件有很多方法,“热心”的微软提供了 WinInet 类,用起来也很方便。当然,我们也可以自己实现这些功能,通过格式化请求头很容易就能实现断点续传和检查更新等等功能 。
连接主机
格式化请求头
设置接收,发送超时
?????????要想从服务器下载文件,首先要向服务器发送一个请求。HTTP 请求头由若干行字符串组成。下面结合实例说说 HTTP 请求头的格式。假设要下载 /index.html 这个网页 ,那么请求头的写法如下:第1行:方法,请求的内容,HTTP协议的版本下载一般可以用GET方法,请求的内容是“/index.html”,HTTP协议的版本是指浏览器支持的版本,对于下载软件来说无所谓,所以用1.1版 “HTTP/1.1”;“GET /index.html HTTP/1.1”第2行:主机名,格式为“Host:主机”在这个例子中是:“Host:”第3行:接受的数据类型,下载软件当然要接收所有的数据类型,所以:“Accept:*/*”第4行:指定浏览器的类型有些服务器会根据客户服务器种类的不同会增加或减少一些内容,在这个例子中可以这样写:
“User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)”
第5行:连接设置设定为一直保持连接:“Connection:Keep-Alive”第6行:若要实现断点续传则要指定从什么位置起接收数据,格式如下:
“Range: bytes=起始位置 - 终止位置”
比如要读前500个字节可以这样写:“Range: bytes=0 - 499”;从第 1000 个字节起开始下载:
“Range: bytes=999 -”
最后,别忘了加上一行空行,表示请求头结束。整个请求头如下:
GET /index.html HTTP/1.1
Host:
Accept:*/*
User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Connection:Keep-Alive下面用例子看看如何进行断点的下载吧
//?DownloadFile.h:?interface?for?the?CDownloadFile?class.////////////////////////////////////////////////////////////////////////#if?!defined(AFX_DOWNLOADFILE_H__E9A59779_BEF9_4A78_8D0E_ED8C9498E07C__INCLUDED_)#define?AFX_DOWNLOADFILE_H__E9A59779_BEF9_4A78_8D0E_ED8C9498E07C__INCLUDED_#if?_MSC_VER??1000#pragma?once#endif?//?_MSC_VER??1000#define?NOTIFY_MSG_WPARAM_GENDOWNFILEID????????????????0x01#define?NOTIFY_MSG_LOW_WPARAM_FULLSIZE????????????????0x10#define?NOTIFY_MSG_LOW_WPARAM_CURRENTSIZE????????????0x20#define?NOTIFY_MSG_LOW_WPARAM_DOWNSIZE????????????????0x30#define?NOTIFY_MSG_LOW_WPARAM_DOWNSPEED????????????????0x40class?CDownloadFile??{public:????BOOL?OpenRedirectHttpURL(CString?strOldLocation,CInternetSession?cSession);????BOOL?DownLoadFile(LPCTSTR?lpFileURL,LPCTSTR?lpSaveFile);????CDownloadFile();????virtual?~CDownloadFile();????LPCTSTR?GetSavedFileName()?{?return?m_strSaveToFile;}????LPCTSTR?GetDownURL()?{?return?m_strFileURL;}public:????WORD?GenFileID();????void?RegisterNotifyWindow(DWORD?dwThr
显示全部