MFC CHttpFile的使用
两种方式,第一种OpenURL,第二种SendRequest,以前捣鼓过,今天再次整结果发现各种踩坑,好记性不如烂笔头,记录下来。
OpenURL
这种方式简单粗暴,用着舒服。
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方式
这种方式用着很繁琐,一顿代码控制,心里还是有点疑问,搞这么复杂干甚。
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。