posts - 126,  comments - 73,  trackbacks - 0

//==========> 初始化回话
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 我风 阅读(911) 评论(1)  编辑 收藏 引用

FeedBack:
# re: 一些http操作函数
2007-08-31 19:29 | AAAAAAAAAAAAAAAAAAAAA
a   回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(12)

随笔分类

随笔档案

文章档案

相册

收藏夹

C++

MyFavorite

搜索

  •  

积分与排名

  • 积分 - 312445
  • 排名 - 73

最新评论

阅读排行榜

评论排行榜