enum HTTPREQUESTRESULT { RES_REQ_DONE_OK, RES_REQ_ERROR_HTTP, RES_REQ_ERROR_SERVER, RES_REQ_ERROR_NET }; // 请求 HTTPREQUESTRESULT RequestHttp(LPCTSTR url) { CInternetSession session; DWORD dwReadLen = 0; CString szRequestHeader;// HTTP 头 HTTPREQUESTRESULT result = RES_REQ_ERROR_HTTP; DWORD dwHttpFileSize = 0; DWORD dwVersion = GetVersion(); szRequestHeader.Format(_T("Accept: */*/r/nUser-Agent: Mozilla/4.0 (compatible; ") _T("MSIE 9.00; System %u.%u.%u; Fyter Web Requester)/r/nRange: bytes=%u-/r/n"), LOBYTE(LOWORD(dwVersion)), HIBYTE(LOWORD(dwVersion)), HIWORD(dwVersion), 0/*断点续传的开始值*/); CHttpFile* netfile = (CHttpFile*)session.OpenURL(url, 1, INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_PRAGMA_NOCACHE, szRequestHeader, -1); if( netfile ) { DWORD status = 0; netfile->QueryInfoStatusCode(status); if( status >= 200 && status <= 299 ) { netfile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, dwHttpFileSize); char* httpResponse = new char[dwHttpFileSize+1]; dwReadLen = netfile->Read(httpResponse, dwHttpFileSize); httpResponse[dwHttpFileSize] = 0; delete httpResponse; result = RES_REQ_DONE_OK; } else { result = RES_REQ_ERROR_HTTP; } netfile->Close(); delete netfile; session.Close(); } else { result = RES_REQ_ERROR_NET; } return result; }
使用MFC类CInternetSession直接访问HTTP内容,支持断点续传,可轻松改为Windows API方式
最新推荐文章于 2022-10-11 17:32:50 发布
本文介绍了一个使用C++实现的HTTP请求函数,该函数通过CInternetSession类发送GET请求,并处理响应状态码及内容长度等信息。文章详细展示了如何构造HTTP头部信息、打开URL、读取响应数据并进行错误处理。
4360

被折叠的 条评论
为什么被折叠?



