VC实现HTTP协议的GET和POST方法

以下是两个文件:HttpClient.h     HttpClient.cpp     一个类   
   (错误检测部分没有加入)   
   使用方法   
   1:get方式   
   CHttpClient     conn;   
   CString     value=" http://8crystal.com/test.asp";   
                                       value=conn.doGet(value);   
   2:post方式   
   CHttpClient     conn;   
   CString     value=" http://8crystal.com/test.asp";   
   conn.addParam("name1","value1");   
   conn.addParam("name2","value2");   
   conn.addParam("name3","value3");   
   conn.addParam("name4","value4");   
   conn.addParam("name5","value5");   
   conn.addParam("name6","value6");   
   value=conn.doPost(value);               
     
   //     HttpClient.h:     interface     for     the     CHttpClient     class.   
   //   
   //   
     
   #if     !defined(AFX_HTTPCLIENT_H__EA769DCB_AAB9_47CD_BD87_FBD6913592C5__INCLUDED_)   
   #define     AFX_HTTPCLIENT_H__EA769DCB_AAB9_47CD_BD87_FBD6913592C5__INCLUDED_   
     
   #if     _MSC_VER     >     1000   
   #pragma     once   
   #endif     //     _MSC_VER     >     1000   
   #include     "wininet.h"   
   #include     "afxinet.h"   
   class     CHttpClient           
   {   
   public:   
   void     addParam(CString     name,CString     value);   
   CString     doPost(CString     href);   
   CString     doGet(CString     href);   
   CHttpClient();   
   virtual     ~CHttpClient();   
     
   private:   
   CString     CONTENT;   
   int     CL;   
   CStringList     values;   
   CStringList     names;   
   };   
     
   #endif     //     !defined(AFX_HTTPCLIENT_H__EA769DCB_AAB9_47CD_BD87_FBD6913592C5__INCLUDED_)   
     
   ++++++++++++++++++++++++++++++++++++++   
     
     
   //     HttpClient.cpp:     implementation     of     the     CHttpClient     class.   
   //   
   //   
     
   #include     "stdafx.h"   
   #include     "emailsenderv2.h"   
   #include     "HttpClient.h"   
     
   #ifdef     _DEBUG   
   #undef     THIS_FILE   
   static     char     THIS_FILE[]=__FILE__;   
   #define     new     DEBUG_NEW   
   #endif   
     
   //   
   //     Construction/Destruction   
   //   
     
   CHttpClient::CHttpClient()   
   {   
     
   }   
     
   CHttpClient::~CHttpClient()   
   {   
     
   }   
     
   CString     CHttpClient::doGet(CString     href)   
   {   
   CString     httpsource="";   
   CInternetSession     session1(NULL,0);   
   CHttpFile*     pHTTPFile=NULL;   
   try{   
   pHTTPFile=(CHttpFile*)session1.OpenURL(href);   
   //session1.   
   }catch(CInternetException){   
   pHTTPFile=NULL;   
   }   
   if(pHTTPFile)   
   {   
   CString     text;   
   for(int     i=0;pHTTPFile->ReadString(text);i++)   
   {   
   httpsource=httpsource+text+"\r\n";   
   }   
   pHTTPFile->Close();   
   delete     pHTTPFile;   
   }else   
   {   
     
   }   
   return     httpsource;   
   }   
     
   CString     CHttpClient::doPost(CString     href)   
   {   
   CString     httpsource="";   
   CInternetSession     session1;   
   CHttpConnection*     conn1=NULL;   
                   CHttpFile*     pFile     =     NULL;           
   CString     strServerName;   
                   CString     strObject;   
                   INTERNET_PORT     nPort;   
                   DWORD     dwServiceType;   
   AfxParseURL((LPCTSTR)href,dwServiceType,     strServerName,     strObject,     nPort);   
                   DWORD     retcode;                           
                   char*     outBuff     =     CONTENT.GetBuffer(1000);   
                   try           
                   {                                   
                                   conn1     =     session1.GetHttpConnection(strServerName,nPort);                   
                                   pFile     =     conn1->OpenRequest(0,strObject,NULL,1,NULL,"HTTP/1.1",INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_NO_AUTO_REDIRECT);                   
                                   pFile     ->     AddRequestHeaders("Content-Type:     application/x-www-form-urlencoded");                   
                                   pFile     ->     AddRequestHeaders("Accept:     */*");                                                   
                                   pFile     ->     SendRequest(NULL,0,outBuff,strlen(outBuff)+1);                                   
                                   pFile     ->     QueryInfoStatusCode(retcode);                                   
                   }                                                       
                   catch     (CInternetException     *     e){};                                   
   if(pFile)   
   {   
   CString     text;   
   for(int     i=0;pFile->ReadString(text);i++)   
   {   
   httpsource=httpsource+text+"\r\n";   
   }   
   pFile->Close();   
   }else   
   {   
     
   }   
   return     httpsource;   
                   delete     pFile;                   
                   delete     conn1;                   
                   session1.Close();   
   }     
     
   void     CHttpClient::addParam(CString     name,     CString     value)   
   {   
   names.AddTail((LPCTSTR)name);   
   values.AddTail((LPCTSTR)value);   
   CString     eq="=";   
   CString     an="&";   
   CONTENT=CONTENT+name+eq+value+an;   
   CL=CONTENT.GetLength();   
   }   

转载自:http://blog.csdn.net/tianxw1209/archive/2010/11/24/6031621.aspx 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vc http 客户端是一个用于发送和接收 HTTP 请求和响应的客户端程序。它通过使用 VC 编程语言实现,可以在计算机上与服务器进行通信。 vc http 客户端的功能主要包括: 1. 发送 HTTP 请求:通过 vc http 客户端,我们可以发送各种类型的 HTTP 请求,如 GETPOST、PUT、DELETE 等。我们可以指定要访问的 URL 和发送的数据,以及其他一些请求头信息。 2. 接收 HTTP 响应:vc http 客户端能够接收从服务器返回的 HTTP 响应,包括响应状态码、响应头和响应体等。我们可以根据响应来进行相应的处理,如解析响应数据、错误处理等。 3. 管理会话状态:vc http 客户端还可以管理会话状态。通过使用 Cookie 和其他身份验证机制,客户端可以保持与服务器的会话状态,并在后续的请求中使用。 4. 支持安全通信:vc http 客户端支持使用 HTTPS 协议进行安全通信。可以通过配置证书和密钥来确保通信的安全性,防止信息泄漏和篡改。 5. 处理错误和异常:vc http 客户端能够处理各种错误和异常情况。例如,如果服务器返回错误的状态码,客户端可以根据情况进行相应的处理,如重试、报错等。 6. 提供易用的接口:vc http 客户端一般会提供简单易用的接口,使开发者可以方便地使用它进行 HTTP 通信,而无需了解复杂的协议细节。 总的来说,vc http 客户端是一个方便实用的工具,可以帮助我们在编程中与服务器进行 HTTP 通信,并能处理各种请求和响应情况。通过使用它,我们可以轻松地与各种在线服务进行交互,如获取数据、上传文件等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值