MFC 访问网址
来源:互联网 发布:软件服务费发票 编辑:程序博客网 时间:2024/06/05 01:03
.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 2 class 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
.cpp文件
////////////////////////////////// HttpClient.cpp #include "StdAfx.h" #include "InternetConnection.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_INVALID CHttpClient::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(_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->AddRequestHeaders(_T("Accept:application/json, text/javascript, */*")); m_pFile->AddRequestHeaders(_T("Accept-Language:zh-CN,zh;q=0.8")); m_pFile->AddRequestHeaders(_T("Content-Type:application/json; charset=UTF-8")); m_pFile->AddRequestHeaders(_T("Accept-Encoding:gzip, deflate"));// 这里必须使用char*数据进行上传 m_pFile->SendRequest(NULL, 0, (LPVOID)(CW2A(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 = CW2A(cs.GetBuffer()); 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(_T("GET"), strUrl, strPostData, strResponse); } int CHttpClient::HttpPost(LPCTSTR strUrl, LPCTSTR strPostData, string &strResponse) { return ExecuteRequest(_T("POST"), strUrl, strPostData, strResponse); }
0 0
- MFC 访问网址
- js访问网址
- 判断网址能不能访问
- 预访问网址
- 访问远程网址
- php 访问https网址
- java访问网址
- tomcat80端口访问网址
- 网址访问过程
- MFC扩充库 pixielib 网址
- 服务器判断是手机访问网址还是电脑访问网址
- 经常访问的joomla网址
- 常访问的网址网站
- PC如何访问手机网址
- liunx 下命令 访问网址
- 可访问的google网址
- 使用httpClient访问指定网址
- 访问服务端网址获取数据
- iOS 8 之后的动态沙盒路径
- 排序算法再总结再分析java版---未完待续
- 数据段,代码段,堆栈段,BSS段区别
- 第8周项目4-字符串加密
- 相关滤波(MOSSE)
- MFC 访问网址
- github上传代码
- 关于left join你可能需要了解的三点 hr转载
- VS2015设置网站/WebSite的启动端口
- git命令
- 安卓软键盘弹开时挤压界面
- 这是一篇测试文章
- ionic文件选择与上传
- BypassUac------Bypassing Windows User Account Control (UAC) and ways of mitigation