MFC 访问网址

2024-06-23 17:08
文章标签 访问 mfc 网址

本文主要是介绍MFC 访问网址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

.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);  
}  



这篇关于MFC 访问网址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087757

相关文章

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

Nginx 访问 /root/下 403 Forbidden问题解决

《Nginx访问/root/下403Forbidden问题解决》在使用Nginx作为Web服务器时,可能会遇到403Forbidden错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录解决 Nginx 访问 /root/test/1.html 403 Forbidden 问题问题复现Ng

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

Ollama整合open-webui的步骤及访问

《Ollama整合open-webui的步骤及访问》:本文主要介绍如何通过源码方式安装OpenWebUI,并详细说明了安装步骤、环境要求以及第一次使用时的账号注册和模型选择过程,需要的朋友可以参考... 目录安装环境要求步骤访问选择PjrIUE模型开始对话总结 安装官方安装地址:https://docs.