MFC web文件 CHttpFile的使用初探

MFC CHttpFile的使用

两种方式,第一种OpenURL,第二种SendRequest,以前捣鼓过,今天再次整结果发现各种踩坑,好记性不如烂笔头,记录下来。

OpenURL

这种方式简单粗暴,用着舒服。

cpp 复制代码
try
{
	//OpenURL方式 简单粗暴
	CInternetSession session;
	CHttpFile* file = (CHttpFile*)session.OpenURL(_T("https://restapi.amap.com/v3/weather/weatherInfo?key=xxx"));

	//读取数据
	CString content;
	CString temp;
	while (file->ReadString(temp))
	{
		content += temp;
	}

	//使用 注意网络流一般是UTF8 需要转换
	CString convert = CA2T((LPCSTR)content.GetBuffer());
	m_InputEdit.SetWindowText(convert);

	//释放资源
	file->Close();
	session.Close();
	delete file;
}
catch (CInternetException* e)//异常处理
{
	TCHAR sz[1024] = { 0 };
	e->GetErrorMessage(sz, 1024);
	AfxOutputDebugString(sz);
	e->Delete();
}

SendRequest方式

这种方式用着很繁琐,一顿代码控制,心里还是有点疑问,搞这么复杂干甚。

cpp 复制代码
try
{
	//会话方式
	CInternetSession session;
	CHttpConnection* conn = session.GetHttpConnection(_T("restapi.amap.com"));
	CHttpFile* file = conn->OpenRequest(_T("GET"), _T("/v3/weather/weatherInfo?key=xxx"));
	
	//发送请求 关键的一句 和服务器产生交互
	file->SendRequest();
	
	//读取数据
	CString content;
	CString temp;
	while (file->ReadString(temp))
	{
		content += temp;
	}

	//使用 注意网络流一般是UTF8 需要转换
	CString convert = CA2T((LPCSTR)content.GetBuffer());
	m_InputEdit.SetWindowText(convert);

	//释放
	file->Close();
	conn->Close();
	session.Close();

	delete file;
	delete conn;
}
catch (CInternetException* e)//异常处理
{
	TCHAR sz[1024] = { 0 };
	e->GetErrorMessage(sz, 1024);
	AfxOutputDebugString(sz);
	e->Delete();
}

PS

  1. 第二种方法一定要记得调用SendRequest,不然没有和服务器发生交互,是没有数据的,我就是这个地方坑了半天,也没有异常,百思不解,然后一顿看文档,搜网络才发现问题。
  2. 两种方法对比,我暂时不知道优劣,只能说服自己是第二种方法可以建立连接,然后在连接没有释放期间可以多次访问一下服务器。网络编程理论还是有点欠缺呀。
  3. 这个是为了学习图结构研究的,获取地理位置经纬度绘制图。
  4. 准备一下分析json,我知道有rapidjson。
相关推荐
海上彼尚5 小时前
Nodejs也能写Agent - 16.LangGraph篇 - 条件分支与循环
前端·后端·langchain·node.js
To_OC6 小时前
从 “卡死半天” 到 “打字机效果”:大模型流式输出前端实现全记录
前端·javascript·llm
zmzb01036 小时前
C++课后习题训练记录Day157
开发语言·c++
SoaringHeart7 小时前
Flutter最佳实践:键盘辅助视图输入框天添加图片附件
前端·flutter
kyriewen7 小时前
我看完这篇安全论文——AI推荐的npm包,92%是编出来的
前端·javascript·ai编程
小心我捶你啊8 小时前
数据采集和Web解锁不是一回事,从用途到规则区分
前端·爬虫·网络协议
hunterandroid9 小时前
[鸿蒙从零到一] ArkUI 基础组件实战:Text、Image、Button 与 TextInput
前端
fsssb9 小时前
Chromium 源码学习笔记(五):一次点击,在进入 JS 之前先经历了什么?
前端
hunterandroid9 小时前
WorkManager 可靠性实战:唯一任务、重试与幂等设计
android·前端