//==========> 初始化回話
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
我風 閱讀(999)
評論(1) 編輯 收藏 引用