MFC 与 HTTP编程

MFC的HTTP客户端 /读取服务器上数据。另外别忘了异常处理! 阅读详情
HTTP基本是现在应用的最为广泛的应用层协议了。其实本人也不是很懂, 当了两年程序员水平也相当的菜, 今天写这个呢,也是本着交流学习的目的,还望多多指教。。。。

其实大家对MFC有诸多非议, 特别是看到CString都有种想吐的冲动, 不过不要紧,且听我慢慢道来。


众所周知, MFC中对wininet进行了封装, 我们平时做HTTP主要使用三个类:
C/C++ code
   
CInternetSession CHttpConnection CHttpFile
下面我们来分析个HTTP头, 以baidu为例吧

C/C++ code
   
GET / s ? wd = 优快云 & ch =& tn = maxthon2 & bar =& inputT = 2360 HTTP / 1.1 Accept: * /* Referer: http://www.baidu.com/ Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2) Host: www.baidu.com Connection: Keep-Alive Cookie: BAIDUID=299AE68AF13C37CFE541D72AD2695E87:FG=1; BDRCVFR[gztQtCol733]=aeXf-1x8UdYcs

UA-CPU 这个不懂, 不管它
GET 是HTTP指令,我就不说了。  
/s?wd=优快云&ch=&tn=maxthon2&bar=&inputT=2360 这是要请求的资源
Accept: */* 可接收的文件类型, */* 就是所有类型了。
Referer: http://www.baidu.com/ 表示我来自哪个页面。

Accept-Encoding: gzip, deflate
Accept-Language: zh-cn   
这两个一般是一起用的, 表示让服务器发送压缩过的数据回来, 具体用的什么算法, 不懂。

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2) 这是浏览器在告诉服务器:我是XXX
Host: www.baidu.com 这个是主机名
Connection: Keep-Alive TCP长连
Cookie: 这个参数一般用在需要验证的网站,很多人通过修改cookie来欺骗服务器。



好了, 转入正题:
0.抓包工具 用HTTPAnalyzerFullV5 只推荐这一个, 因为我只会用这个。。。

1. 超时设置, 因为MFC中的封装了不能设置超时(应该是可以设,但没有作用的),所以我一般是不管它的, 因为默认是十秒超时, 如果实在没办法, 就另开个线程, 用
WaitForSingleObject(event, timeout) 来判断是否超时。

2.HTTPS,这个其实一点也不神秘。。设置下参数就可以了
C/C++ code
   
#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

HTTPS用SECURE_REQUEST  

3 Agent, 有些服务器是禁止spider的 所以还是告诉它“我是IE”比较好

C/C++ code
   
#define IE_AGENT _T("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; @MMZ4d.DeM_3+6~9=@nE2iuHyW-3XZ_fh]=t,-; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)")


4.Connection: Keep-Alive 建议去掉, 无端增加服务器压力是很不厚道的。

5.Cookie 这个参数一般人是不会管它的,但如果你想伪装的话就得拿它做些事情了。

首先要禁止MFC自动传入和传出Cookie.  
#define NORMAL_REQUEST INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_NO_COOKIES

然后在发完请求后使用CHttpFile::QueryOption 来取服务器返回的cookie,它有个缺点就是取不到httpOnly的cookie

这里有点小麻烦, 因为很多人会说:哎呀, 我看到有HTTP-Only的Cookie怎么办啊
淡定....不要紧, 参考一下这篇文章: http://www.codeproject.com/KB/shell/RetrieveHttponlyCookies.aspx?msg=3889453#xx3889453xx 它这个使用的是延时加载DLL技术(看过window核心编程最后一章的朋友会心地笑了。。。)
不过比较蛋疼的是,使用这个类,必须把工程改成unicode的,不然会发生崩溃。

不会用就不要找我了。。

6。数字证书。 这个比较麻烦 ,总不能自己去加密吧。。。 不过也不要紧, 把Webbrowser嵌入到程序里,用它去过证书, 然后通过上面的hook技术把cookie拦截下来就是了。

7,Gzip 同样是为了减轻网络传输的压力。 就让服务器压缩下再传回来吧, 一般压缩率在60%-80%  
  发请求时,加入  
Accept-Encoding: gzip, deflate
Accept-Language: zh-cn   

在接收到以后, 自己解码。。。



好了,我知道的也就这么多, 大家不要喷啊,

最后奉上我自己的封装类, 支持HTTPS和GZIP(写的很烂,懒得改了)

http://download.youkuaiyun.com/source/3395305
MFC之HTTP协议编程 一、建立会话(Session)对象:      CInternetSession mysession; 二、连接到Http服务器:      CHttpConnection *myconn=mysession.GetHttpConnection("www.baidu.com"); 三、打开Http请求:      CHttpFile *myfile=myconn->O 阅读详情

相关推荐

MFC实现HTTP通信(附完整源码)

MFC实现HTTP通信(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1026

MFC 处理 HTTP 请求的基本方法

1 MFC 处理 HTTP 请求的基本方法 1.1 配置本地的 HTTP 服务器 为方便测试,可以先配置一个本地的 HTTP 服务器,根据各种需要进行定制。 我在这里,用 JSP 定制了一个基本的 HTML 表单程序,分为 index.jsp 和 RequestObjectInJSP.jsp 两个文件。其中,index.jsp 用来提供表单程序,方便测试 RequestObjec

xiaocao9903的专栏 2336

用VC/MFC打造轻量级HTTP服务器:从Socket编程到协议解析实战

HTTP协议是Web通信的基础,而Socket编程则是实现网络通信的核心技术。理解从TCP连接到HTTP报文解析的完整链路,是深入掌握服务器开发的关键。借助VC/MFC框架,开发者可以快速构建一个内嵌于Windows桌面程序的轻量级HTTP服务器,无需依赖Nginx等重型组件。通过WinSock原生API实现监听与多线程并发处理,解析浏览器请求并返回正确的MIME类型与文件内容,既能满足局域网内报表、图片、日志页面的快速共享需求,又能加深对HTTP状态码、响应头、URL编码等概念的理解。本文以实战方式拆解一

weixin_29197051的博客 315

VC/MFC关于Http协议的应用总结

       本文章希望能帮助其他VC/MFC的开发人员解释一下关于其使用http协议与远方的服务器进行交互的一些疑点。文章观点仅限个人理解,大家参考一下,如有错漏,不负责。       首先,什么是协议?在开发项目的过程中,我们常常会听说到各种协议,如TCP/UDP/HTTP/FTP等协议。就个人理解看,协议分为两种,第一种是技术层面的协议,如上述说的,大家应该不陌生,起码听说过。第二种是会话层...

周春岳的程序人生 1005

VC/MFC手写HTTP服务器:网络编程核心要点与协议解析实践

HTTP协议是Web通信的基础,基于TCP socket进行文本请求与响应交换。解析请求行、头部与Content-Length是网络编程的基本功。使用CAsyncSocket消息驱动模型,可以在单线程中处理多连接,避免阻塞;同时需注意粘包、半包和字符集问题。这类实现常用于课程设计、协议学习和小型服务器原型。以VC/MFC环境为例,从Winsock初始化、监听建立、请求解析、MIME映射到粘包处理,完整拆解一个可运行的HTTP服务器实现,帮助开发者掌握从socket层到协议层的工程细节。

weixin_34199764的博客 307

Visual C++ MFC 编程实例精讲(第二版)

本文还有配套的精品资源,点击获取 简介:本书深入讲解了使用Microsoft Foundation Classes (MFC)库在Visual C++平台上进行高效Windows应用程序开发的技术。MFC简化了Windows API编程,提供了面向对象的类库,使得开发者能够更便捷地构建Windows桌面应用。书中包含了85个实例,覆盖了用户界面设计、文件操作、视图与文档管理...

weixin_42181686的博客 1051

mfc http

1MFC 处理 HTTP 请求的基本方法 1.1配置本地的 HTTP 服务器 为方便测试,可以先配置一个本地的 HTTP 服务器,根据各种需要进行定制。 我在这里,用 JSP 定制了一个基本的 HTML 表单程序,分为 index.jsp 和 RequestObjectInJSP.jsp 两个文件。其中,index.jsp 用来提供表单程序,方便测试 Reques...

aixiao0036的博客 205

MFC实现的简单的HTTP的POST和GET方法的类

用MFC实现的简单的HTTP的POST和GET方法,方便调用

MFC 的 HTTP 请求处理

MFC 的 HTTP 请求处理  http://cn.waterlin.org/Microsoft/MFC-HTTP-request.html

ccfxue的博客 1684

钙钛矿太阳能电池稳定性测试:ISOS协议详解与标准化实践指南

在光伏器件研发中,稳定性测试是评估材料与器件长期可靠性的核心环节,其关键在于实现测试条件的标准化与数据的可比性。通过控制变量和模拟真实环境应力,标准化测试协议能够系统揭示材料衰减机理与器件失效模式,为技术迭代提供可靠依据。在钙钛矿太阳能电池领域,ISOS协议作为国际公认的测试框架,通过分级体系(如ISOS-L系列光照测试与ISOS-D系列暗态测试)和关键参数定义(如光源光谱匹配、MPP跟踪、结温控制),解决了不同实验室数据无法横向对比的痛点。该协议不仅规范了测试流程,还通过硬件系统搭建、自动化数据采集与归一

weixin_33600816的博客 319

三相逆变器拓扑结构的分析及应用场景

三相逆变器是电力电子领域中广泛应用的一种设备,用于将直流电转换为交流电。不同的拓扑结构在性能、成本、复杂度和应用领域上存在差异。小编将在本文中将进一步拓展对三相逆变器拓扑结构的分析,并探讨其适用的应用场景。

道合顺的博客 2235

采用VC/MFC进行HTTP编程时需要用到的类及相关函数

以下介绍的类和相关函数全部属于WinINet,WinInet全称是Win32 Internet Extension,它提供一个通用的网络协议访问接口,关于WinInet的整体介绍参考WinINet基础。 需要用到的WinINet class: CInternetSession CInternetSession用来创建和初始化Internet会话,MSDN的解释是:“Creates

我的地盘 1823

kettle写doris操作

文件在目录:doris-master\extension\kettle\assemblies\plugin\target\doris-stream-loader-plugins-9.4.0.0-343.zip。官方提供了doris stream load插件,下载源码编译后放到kettle的插件目录即可使用。地址:https://github.com/apache/doris.git。注意:需要doris插件或者kettle转换生成模板的私聊博主。使用PDmaner同步业务库生成建表语句。

weixin_44449054的博客 3029

MFC网络编程实战:WinInet实现HTTP下载与POST请求详解

在Windows桌面应用开发中,网络通信是常见需求,HTTP协议作为最广泛的应用层协议,承载着接口调用、文件传输等核心功能。MFC作为经典Windows UI框架,其封装的WinInet接口提供了统一的互联网访问能力,简化了TCP连接、请求封装、代理协商等底层细节。通过CInternetSession与CHttpFile等类,开发者可以高效实现GET/POST请求、带进度条的文件下载以及Cookie模拟登录等场景。同时,合理管理线程与Session生命周期、处理UTF-8编码转换、应对HTTPS证书校验等实

weixin_42522575的博客 306

LLaMA-Factory微调教程2:命令行sft微调

本文介绍了如何使用llama-factory项目在本地运行Qwen2-7B大语言模型进行对话。首先通过llamafactory-cli env查看环境配置,然后使用git lfs下载Qwen2-7B模型。创建配置文件qwen2_7b_instruct.yaml,修改模型路径和模板参数。最后通过llamafactory-cli chat命令启动对话服务,加载模型配置文件和tokenizer,完成环境初始化后即可进行交互式对话。

Cachel Wood的博客 8814

使用mid360运行lio-livox对比fast-lio2

msg_type为激光雷达发出的数据格式,有livox自定义数据类型格式CustomMsg和ros标准的PointCloud2格式,因此首先需要确定激光雷达端配置的是哪种格式。可以从激光雷达的ros驱动中看到驱动端有三种格式可以选,驱动端的数字2对应lio-livox中的1,驱动端的0对应lio-livox的格式0。如果使用的是Ubuntu18.04编译完成后运行直接成功,如果使用20.04运行会报错,需要修改以下源代码。针对livox-mid360 运行lio-livox的一些问题。

z1872385的博客 1229

MFC之HTTP post请求

一、建立会话(Session)对象:      CInternetSession mysession; 二、连接到Http服务器:       CHttpConnection *myconn=mysession.GetHttpConnection("www.baidu.com"); 三、打开Http请求:       CHttpFile *myfile=myconn-

ccfxue的博客 4802

Altium Designer(AD24/25)PCB编辑的几种方法介绍

本文介绍了Altium Designer(AD24/25)软件中PCB编辑的四种操作方法:1)通过菜单栏"Place→Component"激活;2)点击工具栏元器件图标;3)右键快捷菜单选择;4)快捷键P+C组合操作。建议初学者先通过菜单栏和快捷菜单熟悉操作,熟练后转为工具栏和快捷键以提高效率。文章配有操作示意图,帮助用户快速掌握PCB元器件放置技巧。

fydar的博客 941

MFC网络编程1

4 客户应用程序在进行操作时,需要调用回调函数监视会话的状态。WinInet类是对WinInet API的封装,它有许多优越之处,程序员无需了解网络传输协议和windows套接字的细节,只需简单的调用里的几个成员函数就可与服务器建立连接。WinInet API进行网络编程需要大量的底层编程工作,包括win32编程,FTP,HTTP协议本身的了解,该函数包括WinInet API函数,自动拨号函数,URL函数,ftp函数,http函数,cookie函数,身份验证函数以及缓存函数。

m0_67392182的博客 301

告别 GENERATE_SUBPOOL_DIR_FULL:用 RTTC 平替 CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE 的一套更稳方案

文章摘要:本文探讨了ABAP开发中动态内表的创建问题,重点分析了使用CL_ALV_TABLE_CREATE方法可能遇到的GENERATE_SUBPOOL_DIR_FULL错误。该错误源于临时subroutine pool的36次创建上限,常在批量处理或频繁调用时出现。文章提出基于RTTC技术的替代方案ZCL_ALV_TABLE_CREATE_RTTC,通过运行时类型服务直接创建动态内表,无需生成临时代码,从而规避了资源限制。该方法保持接口兼容性,只需简单替换类名即可实现无缝迁移,是解决动态表创建瓶颈的有效方

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 223

【AI智能体】最强AI编程利器 Claude Code 从部署到项目实战详解

最强AI编程利器 Claude Code 从部署到项目实战详解

congge 4511

VCMFC实现简单的Http服务器:探索Web服务背后的奥秘

VCMFC实现简单的Http服务器:探索Web服务背后的奥秘 去发现同类优质开源项目:https://gitcode.com/ 在数字化时代,Http服务器作为网站和服务的关键组成部分,其工作原理和技术实现一直备受关注。今天,我们将为您介绍一个开源项目——VCMFC实现简单的Http服务器,它不仅可以帮助您轻松搭建个人Web服务器,还是学习Http协议和服务器工作原理的绝佳起点。 项目介绍 VCM...

gitblog_06774的博客 499

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

用MFC 和Sockets 编写基于HTTP 服务的例子(链接)

MSDN: Write a Simple HTTP-based Server Using MFC and Windows Sockets 转载于:https://www.cnblogs.com/finema/archive/2009/03/19/1416295.html

weixin_30898109的博客 225

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

mfc 获得服务器文件信息,VC编程之VC 读取服务器上的文件(HTTP方式)

本文主要向大家介绍了VC编程之VC 读取服务器上的文件(HTTP方式),通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。CString GetStringFromUrl(LPCTSTR pszUrl){CString str ;HINTERNET hSession = ::InternetOpen( _T("4399GameBox") , INTERNET_OPEN_TYPE_PRECO...

weixin_34785304的博客 386

HTTP Post方法应用的例子

 HTTP Post方法应用的例子: (eddy)首先:MFC例子:void  post()    {         CInternetSession   session("My Session");         CHttpConnection*  pServer = NULL;         CHttpFile*   pFile =  NULL;         CStrin

Eddy_0825的专栏 6345
上一篇: 图像特效之朦胧柔化
下一篇: 算术编码(浮点)
华亭真人
博客等级 码龄18年 74粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值