INTERNET编程之INTERNET简单使用HTTP

这篇博客介绍了如何在Win32环境下使用HTTP进行简单的INTERNET编程,通过C++的API函数实现连接到www.google.com并获取网页内容。示例代码展示了从初始化Internet会话到发送请求、接收响应的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好了,废话不说了.教大家如何简单使用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;
}

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

下次,教大家如何实现断点续传和断点下载啊!呵呵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值