您的位置:首页 > 理论基础 > 计算机网络

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;
}

理论上,你们拷贝过去可以直接用的.呵呵.

下次,教大家如何实现断点续传和断点下载啊!呵呵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: