C++ 一些http操作函数

本文转自:http://www.cppblog.com/kyelin/archive/2007/05/08/23628.html

 

//==========> 初始化回话
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 对象。 自动清理打开的文件句柄和连接。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值