mfc http协议连接服务器获取数据

本文介绍了一个名为CHttpClient的类的实现细节,该类用于发送HTTP GET和POST请求。文章详细展示了如何通过构造请求参数并利用WinInet API进行网络通信的过程。

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

m_strServerIP 是服务器地址,依次为键值,ret是服务器返回到的数据。

CHttpClient conn;
CString msg;
                                msg =pDlg->m_strServerIP + _T("?");
conn.addParam(_T("type"),_T("21"));
conn.addParam(_T("action"),_T("getinfo"));
conn.addParam(_T("sn"),pDlg->strdatescan1);
conn.addParam(_T("lotid"),pDlg->m_strID );
conn.addParam(_T("uid"),pDlg->m_suid);
conn.addParam(_T("pwd"),pDlg->m_spwd);
conn.addParam(_T("nopwd"),pDlg->m_snopwd);

t1=0;
t2=0;
t1=GetTickCount();//程序段开始前取得系统运行时间(ms)  
ret = conn.doPost(msg);

t2=GetTickCount();


附CHttpClient 类

#pragma once
#include "wininet.h" 
#include "afxinet.h" 
#include <string>


// 操作成功


#define SUCCESS        0


// 操作失败


#define FAILURE        1


// 操作超时 www.it165.net


#define OUTTIME        2






class CHttpClient
{
public: 
void addParam(CString name,CString value); 
CString doPost(CString href); 
CString doGet(CString href); 
CString CHttpClient::UTF8ToUnicode(char* UTF8);


//int HttpGet(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse);


//int HttpPost(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse);


CHttpClient(); 
virtual ~CHttpClient(); 
void Clear();
private: 
CString CONTENT; 
vector<char> pu8;
int CL; 
CStringList values; 
CStringList names; 




//int ExecuteRequest(LPCTSTR strMethod, LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse);
//





//CInternetSession *m_pSession;


//CHttpConnection *m_pConnection;
//
//CHttpFile *m_pFile;

public:
};



#include "StdAfx.h"
#include "stdafx.h"
#include "HttpClient.h"
//#ifdef _DEBUG 
//#undef THIS_FILE 
//static char THIS_FILE[]=__FILE__; 
//#define new DEBUG_NEW 
//#endif 
#include<vector>
#include <string>
#define int32 __int32
using namespace std;
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 


#define  NORMAL_CONNECT             INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_PRAGMA_NOCACHE 


#define  SECURE_CONNECT             NORMAL_CONNECT | INTERNET_FLAG_SECURE  


#define  NORMAL_REQUEST             INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE 


#define  SECURE_REQUEST             NORMAL_REQUEST | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID 
#define  BUFFER_SIZE       1024




CHttpClient::CHttpClient() 

//m_pSession = new CInternetSession;
//
//m_pConnection = NULL;
//
//m_pFile = NULL;





CHttpClient::~CHttpClient() 

//Clear();
//
// if(NULL != m_pSession)
// {
//
// m_pSession->Close();
//
// delete m_pSession;
//
// m_pSession = NULL;
//
// }





//void CHttpClient::Clear()
//{
//
// if(NULL != m_pFile)
// {
//
// m_pFile->Close();
//
// delete m_pFile;
//
// m_pFile = NULL;
//
// }
//
// if(NULL != m_pConnection)
// {
//
// m_pConnection->Close();
//
// delete m_pConnection;
//
// m_pConnection = NULL;
//
// }
//
//}
//
//
//int CHttpClient::ExecuteRequest(LPCTSTR strMethod, LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse)
//{
//
// CString strServer;
//
// CString strObject;
//
// DWORD dwServiceType;
//
// INTERNET_PORT nPort;
//
// strResponse = _T("");
//
// 
//
// AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort);
//
// 
//
// if(AFX_INET_SERVICE_HTTP != dwServiceType && AFX_INET_SERVICE_HTTPS != dwServiceType)
// {
//
// return FAILURE;
//
// }
//
// 
//
// try
// {
// m_pConnection = m_pSession->GetHttpConnection(strServer,
//
// dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_CONNECT : SECURE_CONNECT,nPort);
//
// m_pFile = m_pConnection->OpenRequest(strMethod, strObject,
// NULL, 1, NULL, NULL,
// (dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_REQUEST : SECURE_REQUEST));
//
// 
//
// //DWORD dwFlags;
//
// //m_pFile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
//
// //dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
//
// ////set web server option
//
// //m_pFile->SetOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags);
//
// 
//
// m_pFile->AddRequestHeaders(_T("Accept: *,*/*"));
//
// m_pFile->AddRequestHeaders(_T("Accept-Language: zh-cn"));
//
// m_pFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));
//
// m_pFile->AddRequestHeaders(_T("Accept-Encoding: gzip, deflate"));
//
// m_pFile->SendRequest(NULL, 0, (LPVOID)(LPCTSTR)strPostData, strPostData == NULL ? 0 : _tcslen(strPostData));
//
// 
//
// char szChars[BUFFER_SIZE + 1] = {0};
//
// CString strRawResponse = _T("");
//
// UINT nReaded = 0;
//
// while ((nReaded = m_pFile->Read((void*)szChars, BUFFER_SIZE)) > 0)
// {
//
// szChars[nReaded] = '\0';
//
// strRawResponse += szChars;
//
// memset(szChars, 0, BUFFER_SIZE + 1);
//
// }
//
// 
//
// int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strRawResponse, -1, NULL, 0);
//
// WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
//
// memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
//
// 
//
// MultiByteToWideChar(CP_UTF8,0,strRawResponse/*.c_str()*/,-1, pUnicode,unicodeLen);
//
// CString cs(pUnicode);
//
// delete [] pUnicode;
//
// pUnicode = NULL;
//
// 
//
// strResponse = cs;
//
// Clear();
//
// }
// catch (CInternetException* e)
// {
//
// Clear();
//
// DWORD dwErrorCode = e->m_dwError;
//
// e->Delete();
//
// DWORD dwError = GetLastError();
//
// //PRINT_LOG("dwError = %d", dwError, 0);
//
// if (ERROR_INTERNET_TIMEOUT == dwErrorCode)
// {
//
// return OUTTIME;
//
// }
// else
// {
// return FAILURE;
// }
//
// }
//
// return SUCCESS;
//
//}


 


//int CHttpClient::HttpGet(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse)
//
//{
//
// return ExecuteRequest("GET", strUrl, strPostData, strResponse);
//
//}
//
// 
//
//int CHttpClient::HttpPost(LPCTSTR strUrl, LPCTSTR strPostData, CString &strResponse)
//
//{
//
// return ExecuteRequest("POST", strUrl, strPostData, strResponse);
//
//}






CString CHttpClient::doGet(CString href) 

CString httpsource=_T(""); 
CInternetSession session1(NULL,0,PRE_CONFIG_INTERNET_ACCESS,NULL,NULL,INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE );
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+_T("\r\n"); 



pHTTPFile->Close();
session1.Close();
delete pHTTPFile; 
pHTTPFile=NULL;
}else 




return httpsource; 



//CString CHttpClient::doPost(CString href) 
//{ 
// CString httpsource=_T(""); 
// CInternetSession session1; 
// CHttpConnection* conn1=NULL; 
// CHttpFile* pFile = NULL; 
// CString strServerName; 
// CString strObject; 
// INTERNET_PORT nPort; 
// DWORD dwServiceType; 
//
//
// AfxParseURL((LPCTSTR)href,dwServiceType, strServerName, strObject, nPort); 
//
// //if(AFX_INET_SERVICE_HTTP != dwServiceType && AFX_INET_SERVICE_HTTPS != dwServiceType)
// //{
// //
// // return;
// //}
//
//
//
// DWORD retcode; 
// char* outBuff = CONTENT.GetBuffer(1000); 
//
// try 
//
// conn1 = session1.GetHttpConnection(strServerName,nPort);
//
// pFile = conn1->OpenRequest(0,strObject,NULL,1,NULL,_T("HTTP/1.1"),INTERNET_FLAG_EXISTING_CONNECT/*|INTERNET_FLAG_NO_AUTO_REDIRECT*/ | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE); 
//
// //pFile = conn1->OpenRequest(0, strObject,
// // NULL, 1, NULL, NULL,
// // (dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_REQUEST : SECURE_REQUEST));
//
// pFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded")); 
// pFile->AddRequestHeaders(_T("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+_T("\r\n"); 
//
// pFile->Close();
//
// //delete pFile; 
// //pFile = NULL;
// }else 
//
//
//
//
// conn1->Close();
// delete conn1;
// conn1 = NULL;
// session1.Close(); 
//
// //outBuff = NULL;
//
// return httpsource;
//} 


CString CHttpClient::doPost(CString href) 

CString httpsource=_T(""); 
CInternetSession session1; 
CHttpConnection* conn1=NULL; 
CHttpFile* pFile = NULL; 
CString strServerName; //ip?
CString strObject; 
INTERNET_PORT nPort; 
DWORD dwServiceType; 
AfxParseURL((LPCTSTR)href,dwServiceType, strServerName, strObject, nPort); 
DWORD retcode; 


//char* outBuff= new char(1000); 


char* pmb= new char(CONTENT.GetLength()+1);
strcpy(pmb,CONTENT.GetBuffer());
CONTENT.ReleaseBuffer(-1);
MBToUTF8(pu8, pmb,(CONTENT.GetLength()+1 )) ;
char* outBuff=&pu8[0];
pmb = NULL;
delete [] pmb;
//delete pmb;


//CONTENT.GetBuffer(1000);=UnicodeToUtf8(CONTENT); 


try 

session1.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,3000);
conn1 = session1.GetHttpConnection(strServerName,nPort); 
pFile = conn1->OpenRequest(0,strObject,NULL,1,NULL,_T("HTTP/1.1"),INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_NO_AUTO_REDIRECT | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_DONT_CACHE ); 
pFile -> AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded")); 
pFile -> AddRequestHeaders(_T("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+_T("\r\n"); 

pFile->Close(); 
}else 






Clear();
 
delete pFile; 
delete conn1; 
session1.Close(); 
return httpsource;







void CHttpClient::addParam(CString name, CString value) 

names.AddTail((LPCTSTR)name); 
values.AddTail((LPCTSTR)value); 
CString eq=_T("="); 
CString an=_T("&"); 
//if(name == _T("imei") || name == _T("lotid"))
// CONTENT=CONTENT+name+eq+value;
//else
CONTENT=CONTENT+name+eq+value+an; 
CL=CONTENT.GetLength(); 





void CHttpClient::Clear()
{
CONTENT = _T("");
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值