问题描述
- CInternetSession有官方给的比较大型的example吗?这个bug实在是太多了啊
- 如题
我就写一个爬虫而已,过一会程序莫名其妙就unexpected handle
调试也找不到原因,我都快崩溃了代码如下:
CStringA Temp; CInternetSession Session(_T(""Microsoft Internet Browser"") 1UL INTERNET_OPEN_TYPE_PROXY pstrProxyName NULL INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE); //不设置名字会调用 AfxGetAppName() // Session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT 5000); // 连接超时 Session.SetOption(INTERNET_OPTION_SEND_TIMEOUT 5000); // 发送超时 Session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT 5000); // 接收超时 Session.SetOption(INTERNET_OPTION_CONNECT_RETRIES 1); // 1次重试 // CHttpConnection *pHttpConnect = NULL; CHttpFile *pHttpFile = NULL; // CStringA RecvBufferA; int nBufferLen = 2048; // DWORD dwStatus = 0; LPCTSTR pszAcceptType[] = { _T(""text/htmlapplication/xhtml+xmlapplication/xml;q=0.9image/webp*/*;q=0.8"") NULL }; // try { pHttpConnect = Session.GetHttpConnection(pstrServer); pHttpFile = pHttpConnect->OpenRequest(CHttpConnection::HTTP_VERB_GET pstrObjectName //访问页面 _T("""") //来源 1UL pszAcceptType _T(""HTTP/1.1"") INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE);// INTERNET_FLAG_NO_AUTO_REDIRECT不自动重定向 if (pHttpFile) { pHttpFile->SendRequest();// 第二个参数为POST数据 pHttpFile->QueryInfoStatusCode(dwStatus); pHttpFile->Read(RecvBufferA.GetBuffer(nBufferLen) nBufferLen - 1); RecvBufferA.ReleaseBuffer(); } } catch (CInternetException* pEx) { TCHAR sz[1024]; pEx->GetErrorMessage(sz 1024); _tprintf_s(_T(""ERROR! %sn"") sz); pEx->Delete(); Sleep(5000); } // if the connection is open close it if (NULL != pHttpConnect) { pHttpConnect->Close(); delete pHttpConnect; } if (NULL != pHttpFile) { pHttpFile->Close(); delete pHttpFile; } Session.Close();
解决方案
http://riddickbryant.iteye.com/blog/566186
解决方案二:
你接收数据只Read一次,不是while循环Read ?
解决方案三:
因为网站访问的错误情况也很多,需要你各个都要处理。多次测试来达到稳定结果。
时间: 2024-12-20 16:24:04