第一步:
将 URL 分成各种组件基于 URL 细分和规范.
BOOL WINAPI InternetCrackUrl(
IN LPCTSTR lpszUrl,
IN DWORD dwUrlLength,
IN DWORD dwFlags,
IN LPURL_COMPONENTS lpUrlComponents);
第二步:
初始化WININET.DLL.
HINTERNET WINAPI InternetOpen(
LPCTSTR lpszAgent, //指定正在使用网路函数的利用程序。当Http协定使用时,将变成用户代理。
DWORD dwAccessType, //指定拜访的类型。
//INTERNE_OPEN_TYPE_PRECONFIG 从注册处重新获得代理服务器或直接配置。
LPCTSTR lpszProxy, //代理,为NULL,函数从注册处读代替理信息。
LPCTSTR lpszProxyBypass,//代理旁路,为NULL,函数从注册处读取旁路列表。
DWORD dwFlags); //标志。
例子:
hOpen = InternetOpen (TEXT("Mozilla/4.0 (compatible; )"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
第三步:
衔接到一个HTTP.
HINTERNET WINAPI InternetConnect(
HINTERNET hInternet, //从InternetOpen返回的句柄。
LPCTSTR lpszServerName, , //提供了服务器的地址
INTERNET_PORT nServerPort, //服务器端口
LPCTSTR lpszUserName, //用户名,一般为NULL.
LPCTSTR lpszPassword, //密码,一般为NULL.
DWORD dwService, //服务类型。
//INTERNET_SERVICE_FTP FTP服务、INTERNET_SERVICE_HTTP HTTP服务
DWORD dwFlags, //标志
DWORD dwContext); //为利用程序定义的值, ,用来为返回的句柄标识运用程序装备场景。
例子:
hConnect = InternetConnect (hOpen, szServer, u_com.nPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, NULL);
第四步:
创立一个恳求句柄并且把参数存储在句柄中.
HINTERNET WINAPI HttpOpenRequest(
HINTERNET hConnect, //从Internet Connect 返回的句柄
LPCTSTR lpszVerb, //设为TEXT("GET"),指定wo们想要得到由第三参数的命名的对象。
LPCTSTR lpszObjectName, //指定动作的目的对象名称的字符串。
LPCTSTR lpszVersion, //为NULL,则默以为"HTTP/1.0"
LPCTSTR lpszReferrer, //一个网点地址,在这网点上wo们发明了wo们现在想要看见的Url,通常NULL
LPCTSTR *lplpszAcceptTypes, //wo们程序接收的文件类型。
DWORD dwFlags, //INTERNET_FLAG_NO_RELOAD 永远不支撑从电报和高速缓存来的数据。
//INTERNET_FLAG_NO_CACHE_WRIE 不添加能力够高速缓存返回的实体。
DWORD dwContext );
例子:
hRequest = HttpOpenRequest (hConnect, TEXT("GET"), szObject, NULL, NULL, (LPCTSTR*)AcceptTypes, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, 0);
//AcceptTypes[2]={TEXT("Accept:*/*/r/n/r/n"),NULL}
第五步:
添加报头信息(http协定).
BOOL WINAPI HttpAddRequestHeaders(
HINTERNET hHttpRequest, //HttpOpenRequest返回的句柄。
LPCTSTR lpszHeaders, //报头.
DWORD dwHeadersLength, //报头大小 。
DWORD dwModifiers); //指定一个值,改动函数的语意。
//HTTP_ADDREQ_FLAG_REPLACE 替换和移除一个报头,如果这个报头的值为空并且被树立。移除报头,如果这个报头非空,取代报头。
//HTTP_ADDREQ_FLAG_ADD 增添一个报头,如果它不存在和HTTP_ADDREQ_FLAG_REPLACE一起使用。
例子:
bRet=HttpAddRequestHeaders( hRequest,szHead, strlen(szHead),HTTP_ADDREQ_FLAG_REPLACE);
//szHead[]="Accept:*/*/r/n/r/n"
改动报头,添加断点的机密就在这里。
增添断点例子(加在HttpAddRequestHeaders之后):
if (dwSizeExist>0) //断定是否有下载
{
char szSize[1024] = {0};
sprintf (szSize, "Range:bytes=%d-", dwSizeExist); , ; //增添报头,设置下载的范畴。从dwSizeExist到结尾。
HttpAddRequestHeaders(hRequest,szSize, strlen(szSize),HTTP_ADDREQ_FLAG_ADD );
}
第六步:
把恳求参数送到HTTP服务器,传送额外的HTTP题目给服务器.
BOOL WINAPI HttpSendRequest(
HINTERNET hRequest,
LPCTSTR lpszHeaders,
DWORD dwHeadersLength,
LPVOID lpOptional,
DWORD dwOptionalLength);
例子:
bRet=HttpSendRequest (hRequest, NULL, 0, NULL, 0);
第七步:
得到关于文件的信息
BOOL WINAPI HttpQueryInfo(
HINTERNET hRequest,
DWORD dwInfoLevel,
LPVOID lpBuffer,
LPDWORD lpdwBufferLength,
LPDWORD lpdwIndex);
第八步:
读文件内容
BOOL WINAPI InternetReadFile(
IN HINTERNET hFile,
IN LPVOID lpBuffer,
IN DWORD dwNumberOfBytesToRead,
OUT LPDWORD lpdwNumberOfBytesRead;
第九步:
关闭句柄
BOOL WINAPI InternetCloseHandle(
HINTERNET hInternet);
编写程序的一点心得!怕本身忘了。所以写下来。
URL 分成各种组件基于 URL 细分和规范
最新推荐文章于 2021-05-23 00:12:30 发布