INTERNET编程之INTERNET简单使用HTTP
2008-03-07 21:51
363 查看
好了,废话不说了.教大家如何简单使用HTTP吧,这是一个Win32工程.
/*====================================================================*/
这里只是简单的教大家如何使用INTERNET编程(实现HTTP功能)。在实际应用中,
用户还应该做更多的处理,或者用其他的方式实现,如:MFC的封装类实现(CIn
ternetSession,CHttpConnection,CFtpConnection,CFtpFileFind)等等,当然了
,你也可以用底层的SOCKET实现。呵呵。
/*====================================================================*/
// Compile with: /MT /EHsc
#include <afx.h>
#include <afxwin.h>
#include <afxinet.h>
#include <iostream>
using namespace std;
CWinApp theApp;
int main()
{
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
return -1;// MFC 初始化失败!
}
CString strString = _T("");
HINTERNET hSession = NULL;
HINTERNET hConnect = NULL;
HINTERNET hHttpFile = NULL;
LPCSTR szHttp = "text/*";
BOOL bSuccess = FALSE;
char buffer[1024] = {0};
DWORD dwSize = 0;
//初始化HTTP session
hSession = ::InternetOpen( theApp.m_pszAppName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if( hSession == NULL )
{
strString.Format( "初始化Internet会话失败!错误原因: %d", GetLastError() );
goto END;
}
//打开一个HTTP连接
hConnect = ::InternetConnect(hSession, "www.google.com",
INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
if( hConnect == NULL )
{
strString.Format( "打开HTTP连接失败!错误原因:%d", GetLastError() );
goto END;
}
//打开一个HTTP请求
hHttpFile = ::HttpOpenRequest( hConnect, "GET",
"", "HTTP/1.1", NULL, &szHttp, INTERNET_FLAG_RELOAD, 0 );
if( hHttpFile == NULL )
{
strString.Format( "打开HTTP请求失败!错误原因: %d", GetLastError() );
goto END;
}
//发出请求 并捕获异常
TRY
{
bSuccess = ::HttpSendRequest( hHttpFile, NULL, 0, NULL, 0 );
}
CATCH( CInternetException,pex )
{
pex->ReportError();
goto END;
}
END_CATCH
if( FALSE == bSuccess )
{
strString.Format( "发出请求失败!错误原因:%d", GetLastError() );
goto END;
}
//得到文件的大小及内容
do
{
InternetReadFile( hHttpFile, (LPVOID)buffer, 1023, &dwSize );
if( dwSize <= 0 ) break;
buffer[dwSize] = 0 ;
strString += buffer;
ZeroMemory( buffer, 1024 );
}while ( TRUE );
END://有时用goto语句会使程序更简洁,当然,不能滥用哦。
// 关闭INTERNET句柄
if( hHttpFile ) ::InternetCloseHandle( hHttpFile );
if( hConnect ) ::InternetCloseHandle( hConnect );
if( hSession ) ::InternetCloseHandle( hSession );
cout << (LPCTSTR)strString << endl;
return 0;
}
理论上,你们拷贝过去可以直接用的.呵呵.
下次,教大家如何实现断点续传和断点下载啊!呵呵
/*====================================================================*/
这里只是简单的教大家如何使用INTERNET编程(实现HTTP功能)。在实际应用中,
用户还应该做更多的处理,或者用其他的方式实现,如:MFC的封装类实现(CIn
ternetSession,CHttpConnection,CFtpConnection,CFtpFileFind)等等,当然了
,你也可以用底层的SOCKET实现。呵呵。
/*====================================================================*/
// Compile with: /MT /EHsc
#include <afx.h>
#include <afxwin.h>
#include <afxinet.h>
#include <iostream>
using namespace std;
CWinApp theApp;
int main()
{
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
return -1;// MFC 初始化失败!
}
CString strString = _T("");
HINTERNET hSession = NULL;
HINTERNET hConnect = NULL;
HINTERNET hHttpFile = NULL;
LPCSTR szHttp = "text/*";
BOOL bSuccess = FALSE;
char buffer[1024] = {0};
DWORD dwSize = 0;
//初始化HTTP session
hSession = ::InternetOpen( theApp.m_pszAppName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if( hSession == NULL )
{
strString.Format( "初始化Internet会话失败!错误原因: %d", GetLastError() );
goto END;
}
//打开一个HTTP连接
hConnect = ::InternetConnect(hSession, "www.google.com",
INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
if( hConnect == NULL )
{
strString.Format( "打开HTTP连接失败!错误原因:%d", GetLastError() );
goto END;
}
//打开一个HTTP请求
hHttpFile = ::HttpOpenRequest( hConnect, "GET",
"", "HTTP/1.1", NULL, &szHttp, INTERNET_FLAG_RELOAD, 0 );
if( hHttpFile == NULL )
{
strString.Format( "打开HTTP请求失败!错误原因: %d", GetLastError() );
goto END;
}
//发出请求 并捕获异常
TRY
{
bSuccess = ::HttpSendRequest( hHttpFile, NULL, 0, NULL, 0 );
}
CATCH( CInternetException,pex )
{
pex->ReportError();
goto END;
}
END_CATCH
if( FALSE == bSuccess )
{
strString.Format( "发出请求失败!错误原因:%d", GetLastError() );
goto END;
}
//得到文件的大小及内容
do
{
InternetReadFile( hHttpFile, (LPVOID)buffer, 1023, &dwSize );
if( dwSize <= 0 ) break;
buffer[dwSize] = 0 ;
strString += buffer;
ZeroMemory( buffer, 1024 );
}while ( TRUE );
END://有时用goto语句会使程序更简洁,当然,不能滥用哦。
// 关闭INTERNET句柄
if( hHttpFile ) ::InternetCloseHandle( hHttpFile );
if( hConnect ) ::InternetCloseHandle( hConnect );
if( hSession ) ::InternetCloseHandle( hSession );
cout << (LPCTSTR)strString << endl;
return 0;
}
理论上,你们拷贝过去可以直接用的.呵呵.
下次,教大家如何实现断点续传和断点下载啊!呵呵
相关文章推荐
- 一个简单的HTTP通讯的例子,使用了CInternetSession,CHttpConnection,CHttpFile三个类
- 一个简单的HTTP通讯的例子,使用了CInternetSession,CHttpConnection,CHttpFile三个类。
- 使用erlang实现简单的http性能测试工具,替代loadrunner、loadspace
- CInternetSession的简单使用
- HttpClient4.3 使用经验(一) 简单使用
- 一个简单的使用wininet的http/ftp文件下载程序
- MPI编程--使用最简单的基本函数计算PI值
- HttpUrlConnection的简单使用
- PostgreSQL安装和简单使用(转载:http://www.linuxsir.org/main/node/275)
- [oracle编程]pl/sql --标量 复合变量以及游标的简单使用
- http 与 c++ 网络编程(用于简单的网络下载)
- 【行易少儿编程】2. Python交互模式的简单使用
- android 网络编程 HttpGet类和HttpPost类使用详解
- 网络编程:HttpURLConnection使用介绍
- Go编程 -- 简单高效的http缓存服务
- Java简单爬虫系列(2)---HttpClient的使用
- xutils的HttpUtils,Post和Get基本使用,以及BitmapUtils的简单使用
- 一次简单的接口编程,使用socket通信
- 使用XMLHttpRequest对象向服务器发送简单的请求
- C#强化系列文章八:HttpModule,HttpHandler,HttpHandlerFactory简单使用