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
- 第二种方法一定要记得调用SendRequest,不然没有和服务器发生交互,是没有数据的,我就是这个地方坑了半天,也没有异常,百思不解,然后一顿看文档,搜网络才发现问题。
- 两种方法对比,我暂时不知道优劣,只能说服自己是第二种方法可以建立连接,然后在连接没有释放期间可以多次访问一下服务器。网络编程理论还是有点欠缺呀。
- 这个是为了学习图结构研究的,获取地理位置经纬度绘制图。
- 准备一下分析json,我知道有rapidjson。