MFC使用HttpGet和HttpPost方法与服务器通信
来源:互联网 发布:淘宝新手卖家活动 编辑:程序博客网 时间:2024/05/23 22:21
处理过程封装到CHttpClient类中,同时支持http和https
HttpClient.h
//////////////////////////////////// HttpClient.h#ifndef HTTPCLIENT_H#define HTTPCLIENT_H#include <afxinet.h>#include <string>using namespace std;#define IE_AGENT _T("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)")// 操作成功#define SUCCESS 0// 操作失败#define FAILURE 1// 操作超时 www.it165.net#define OUTTIME 2class CHttpClient{public: CHttpClient(LPCTSTR strAgent = IE_AGENT); virtual ~CHttpClient(void); int HttpGet(LPCTSTR strUrl, LPCTSTR strPostData, string &strResponse); int HttpPost(LPCTSTR strUrl, LPCTSTR strPostData, string &strResponse);private: int ExecuteRequest(LPCTSTR strMethod, LPCTSTR strUrl, LPCTSTR strPostData, string &strResponse); void Clear();private: CInternetSession *m_pSession; CHttpConnection *m_pConnection; CHttpFile *m_pFile;};#endif // HTTPCLIENT_H
////////////////////////////////// HttpClient.cpp#include "StdAfx.h"#include "HttpClient.h"#include "yazuoLog.h"#define BUFFER_SIZE 1024#define NORMAL_CONNECT INTERNET_FLAG_KEEP_CONNECTION#define SECURE_CONNECT NORMAL_CONNECT | INTERNET_FLAG_SECURE#define NORMAL_REQUEST INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE #define SECURE_REQUEST NORMAL_REQUEST | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALIDCHttpClient::CHttpClient(LPCTSTR strAgent){ m_pSession = new CInternetSession(strAgent); m_pConnection = NULL; m_pFile = NULL;}CHttpClient::~CHttpClient(void){ 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, string &strResponse){ CString strServer; CString strObject; DWORD dwServiceType; INTERNET_PORT nPort; strResponse = ""; 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("Accept: *,*/*"); m_pFile->AddRequestHeaders("Accept-Language: zh-cn"); m_pFile->AddRequestHeaders("Content-Type: application/x-www-form-urlencoded"); m_pFile->AddRequestHeaders("Accept-Encoding: gzip, deflate"); m_pFile->SendRequest(NULL, 0, (LPVOID)(LPCTSTR)strPostData, strPostData == NULL ? 0 : _tcslen(strPostData)); char szChars[BUFFER_SIZE + 1] = {0}; string strRawResponse = ""; 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.c_str(), -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, string &strResponse){ return ExecuteRequest("GET", strUrl, strPostData, strResponse);}int CHttpClient::HttpPost(LPCTSTR strUrl, LPCTSTR strPostData, string &strResponse){ return ExecuteRequest("POST", strUrl, strPostData, strResponse);}
1 1
- MFC使用HttpGet和HttpPost方法与服务器通信
- MFC使用HttpGet和HttpPost方法与服务器通信
- MFC使用HttpGet和HttpPost方法与服务器通信
- MFC使用HttpGet和HttpPost方法与服务器通信
- MFC使用HttpGet和HttpPost方法与服务器通信
- MFC使用HttpGet和HttpPost方法与服务器通信
- 服务Service和通信HttpGet及HttpPost
- 使用httpPost和httpGet出现的bug
- HttpClient的简单使用--HttpGET和HttpPost
- Android:HttpGet与HttpPost
- HttpGet与HttpPost区别
- HttpGet和HttpPost
- HttpGet和HttpPost
- httpGET和httpPOST
- HttpPost和HttpGet解析
- android的网络通信 HttpGet类和HttpPost类
- 王立平--HttpGet()与HttpPost()用法
- HttpPost与HttpGet的区别
- url编码(utf-8)
- Java核心技术卷I:基础知识(原书第8版):13.2 具体的集合
- linux命令(一) - who
- redisco,django中的Model共存
- dyld:Expected in: /System/Library/Frameworks/CFNetwork.framework/CFNetwork
- MFC使用HttpGet和HttpPost方法与服务器通信
- 《近匠》爱拍SDK:手游录像分享 爱拍才会赢
- TextView乱换行问题
- 基于C#和JavaScript的网页验证码优化实现方式(不用Session和Cookie)
- thymeleaf api
- Java核心技术卷I:基础知识(原书第8版):13.3 集合框架
- 使用VS2008编译qt源码时提示错误
- 昆仑叶哲华:创业公司应该掌握的6个公关技巧
- 便笺的位置 截图工具的位置