错误码2-SendRequest调用失败,catch到的
转自 https://blog.csdn.net/heque/article/details/88540462
解决方法:
打开internet explorer(或者internet explorer64), 选择“文件”下拉菜单(没看到的话,按ALT键可以显示菜单栏),然后取消选中“脱机工作”,返回“联机”工作。之后,使用wininet的相关编程将正常工作;SendRequest的返回将正常。
另外,internet explorer的脱机工作,还会导致vpn工具的登录失败问题,导致vpn的服务端网络等问题
这个是
分析:
1.通过firefox或360浏览器访问该https链接能够正常登录,说明网络和服务器等都没有问题;
2.将代码拷贝到另外一台电脑上运行,执行httpsendrequest没有报错,说明应该是系统存在问题;
经过查找分析后,终于解决;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | int CHttpClient::ExecuteRequest( LPCTSTR strMethod, LPCTSTR strUrl, LPCTSTR strPostData, string &strResponse) { CString strServer; CString strObject; DWORD dwServiceType; INTERNET_PORT nPort; strResponse = "" ; AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort); if (AFX_INET_SERVICE_HTTP != dwServiceType && AFX_INET_SERVICE_HTTPS != dwServiceType) { return FAILURE; } //DWORD dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | // INTERNET_FLAG_KEEP_CONNECTION | // INTERNET_FLAG_NO_AUTH | // INTERNET_FLAG_NO_COOKIES | // INTERNET_FLAG_NO_UI | // //设置启用HTTPS // INTERNET_FLAG_SECURE | // INTERNET_FLAG_RELOAD; //m_pSession->SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 1000 * 30); //m_pSession->SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000); //m_pSession->SetOption(INTERNET_OPTION_CONNECT_RETRIES,1); try { m_pConnection = m_pSession->GetHttpConnection(strServer, dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_CONNECT : SECURE_CONNECT, nPort); m_pFile = m_pConnection->OpenRequest(strMethod, strObject, NULL, 1, NULL, NULL, (dwServiceType == AFX_INET_SERVICE_HTTP ? NORMAL_REQUEST : SECURE_REQUEST)); //m_pFile = m_pConnection->OpenRequest(strMethod, strObject, // NULL, 1, NULL, NULL, // dwOpenRequestFlags); #if 0 DWORD dwFlags; m_pFile->QueryOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags); dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA; set web server option m_pFile->SetOption(INTERNET_OPTION_SECURITY_FLAGS, dwFlags); #endif m_pFile->AddRequestHeaders( "Host: sms.huhutv.com.cn" ); m_pFile->AddRequestHeaders( "Accept: text/html, */*; q=0.01" ); m_pFile->AddRequestHeaders( "User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" ); m_pFile->AddRequestHeaders( "Referer: https://sms.huhutv.com.cn/rtcrm-clientweb/npage/obim/staff/loginmng/initLogin.do" ); m_pFile->AddRequestHeaders( "Accept-Language: zh-CN,zh;q=0.8" ); m_pFile->AddRequestHeaders( "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" ); m_pFile->AddRequestHeaders( "Accept-Encoding: gzip, deflate, sdch" ); if (strCookie != "" ){ CString str; str.Format( "Cookie:%s" ,strCookie); m_pFile->AddRequestHeaders(str); } else { m_pFile->AddRequestHeaders( "Cookie: JSESSIONID=6F5AA3FA40C60178D776152742886227; insert_cookie=49078854" ); } m_pFile->AddRequestHeaders( "Connection: keep-alive" ); //MessageBox(NULL,strCookie.GetString(), "strCookie", MB_OK|MB_ICONINFORMATION); //ShowFileHeaders(); m_pFile->SendRequest(NULL, 0, ( LPVOID )( LPCTSTR )strPostData, strPostData == NULL ? 0 : _tcslen(strPostData)); char szChars[BUFFER_SIZE + 1] = {0}; string strRawResponse = "" ; UINT nReaded = 0; GetURLCookie(); DWORD dwStatus = 0; DWORD dwStatusLen = sizeof (dwStatus); m_pFile->QueryInfo(HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE, &dwStatus, &dwStatusLen, 0); while ((nReaded = m_pFile->Read(( void *)szChars, BUFFER_SIZE)) > 0) { szChars[nReaded] = '\0' ; strRawResponse += szChars; memset (szChars, 0, BUFFER_SIZE + 1); } int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strRawResponse.c_str(), -1, NULL, 0); WCHAR *pUnicode = new WCHAR [unicodeLen + 1]; memset (pUnicode,0,(unicodeLen+1)* sizeof ( wchar_t )); MultiByteToWideChar(CP_UTF8,0,strRawResponse.c_str(),-1, pUnicode,unicodeLen); CString cs(pUnicode); delete []pUnicode; pUnicode = NULL; strResponse = cs; //Clear(); } catch (CInternetException* e) { //Clear(); DWORD dwErrorCode = e->m_dwError; e->Delete(); DWORD dwError = GetLastError(); CString strErr; strErr.Format( "dwErrorCode = %d" , dwErrorCode); //LOG::out0("dwError = %d", dwError, 0); MessageBox(NULL,strErr.GetString(), "提示" , MB_OK|MB_ICONINFORMATION); if (ERROR_INTERNET_TIMEOUT == dwErrorCode) { return OUTTIME; } else { return FAILURE; } } return SUCCESS; } |
分类:
C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现