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 对象。 自动清理打开的文件句柄和连接。 

本文链接http://www.taodudu.cc/news/show-647497.html