//==========> 初始化回话
HINTERNET hSession=::InternetOpen("Http",
PRE_CONFIG_INTERNET_ACCESS,
"",
INTERNET_INVALID_PORT_NUMBER,
0);
if(hSession==NULL){
AfxMessageBox("Internet session initalization failed!");
return 1;
}
//==========> 创建链接
HINTERNET hConnect=::InternetConnect(hSession,
pDlg->m_strServer,
INTERNET_INVALID_PORT_NUMBER,
"",
"",
INTERNET_SERVICE_HTTP,
0,
0);
if(hConnect==NULL){
AfxMessageBox("Internet connect initialization failed!");
VERIFY(::InternetCloseHandle(hSession));
return 1;
}
//==========> 打开请求链接
HINTERNET hHttpFile=::HttpOpenRequest(hConnect,
"GET",
pDlg->m_strPath,
HTTP_VERSION,
NULL,
0,
INTERNET_FLAG_DONT_CACHE,
0);
if(hHttpFile==NULL){
AfxMessageBox("Http request failed!");
VERIFY(::InternetCloseHandle(hConnect));
VERIFY(::InternetCloseHandle(hSession));
return 1;
}
//==========> 发送请求
BOOL bSendRequest=::HttpSendRequest(hHttpFile,
NULL,
0,
0,
0);
if(bSendRequest){
char achQueryBuf[16];
DWORD dwFileSize;
DWORD dwQueryBufLen=sizeof(achQueryBuf);
BOOL bQuery=::HttpQueryInfo(hHttpFile,
HTTP_QUERY_CONTENT_LENGTH,
achQueryBuf,
&dwQueryBufLen,
NULL);
if(bQuery){
dwFileSize=(DWORD)atol(achQueryBuf);
}
else{
dwFileSize=10*1024;
}
char* lpszBuf=new char[dwFileSize+1];
DWORD dwBytesRead;
//==========> 读取文件
BOOL bRead=::InternetReadFile(hHttpFile,
lpszBuf,
dwFileSize+1,
&dwBytesRead);
普通操作步骤:
-------------------------------------------------------------------------
开始 HTTP 会话。 创建 CInternetSession 对象。 初始化 WinInet 并连接到服务器。
连接到 HTTP 服务器。 使用 CInternetSession::GetHttpConnection。 返回 CHttpConnection 对象。
打开 HTTP 请求。 使用 CHttpConnection::OpenRequest。 返回 CHttpFile 对象。
发送 HTTP 请求。 使用 CHttpFile::AddRequestHeaders 和 CHttpFile::SendRequest。 查找文件。如果没有找到该文件,则返回 FALSE。
从文件中读取。 使用 CHttpFile。 使用您提供的缓冲区读取指定数目的字节。
处理异常。 使用 CInternetException 类。 处理所有常见的 Internet 异常类型。
结束 HTTP 会话。 处置 CInternetSession 对象。 自动清理打开的文件句柄和连接。
posted on 2007-05-08 15:40
我风 阅读(989)
评论(1) 编辑 收藏 引用