C++模拟Http/Https POST登录web站点(五)

2015-07-20 17:08:16 ? 作者: ? 浏览: 13
; cstrSendData += cstrSendParam; CString cstrRecvData; do { int nRet = SSL_write(ssl, cstrSendData, cstrSendData.GetLength()); if(-1 == nRet) { break; } bRet = TRUE; } while (FALSE); return bRet; } void HttpsClient::RecvLoginPostData(CString &cstrRecvData) { BOOL bRet = FALSE; do { TIMeva l tval; tval.tv_sec = 20; tval.tv_usec = 0; while(TRUE) { FD_SET fds; FD_ZERO(&fds); FD_SET(socketClient, &fds); char recvData[1000] = {0}; int nRecvLen; //int nSelect = select(FD_SETSIZE, &fds, NULL, NULL, &tval); //if (1 != nSelect) //{ // break; //} int nErr = SSL_read(ssl, recvData, sizeof(recvData)); if (nErr <= 0) { break; } cstrRecvData += recvData; } if (cstrRecvData.GetLength() == 0) { break; } bRet = TRUE; } while (FALSE); } void HttpsClient::ParseCookieFromRecvData(const CString cstrRecvData) { list lstCookiesLine; //!存放Set-Cookie的一行,例:Set-Cookie: vso_uname=houqd_1111; CString cstrFind = Set-Cookie:; //!查找标记 CString cstrSeperator = ; //!以 分割号来分割字符串 int nPos = 0; int nStart = cstrRecvData.Find(cstrSeperator); while(nStart != -1) { CString cstrSessionLine = cstrRecvData.Mid(nPos, nStart - nPos + 1); if (cstrSessionLine.Find(cstrFind) != -1) { CString cstrRealRecord = cstrSessionLine.Right(cstrSessionLine.GetLength() - cstrFind.GetLength() - 3); list ::iterator it = find(lstCookiesLine.begin(), lstCookiesLine.end(), cstrRealRecord); if (it == lstCookiesLine.end()) { lstCookiesLine.push_back(cstrRealRecord); } } nPos = nStart; nStart = cstrRecvData.Find(cstrSeperator, nPos + 2); } //!根据每行获取的cookie值,解析为key-value的形式 vector vecCookieSet; for (list ::iterator it = lstCookiesLine.begin(); it != lstCookiesLine.end(); it++) { CString cstrCookies = *it; CString cstrSeperator = ;; StaticUtility::StringSplit(cstrCookies, cstrSeperator, vecCookieSet); } vector vecTemp; for (vector ::iterator it = vecCookieSet.begin(); it != vecCookieSet.end(); it++) { vecTemp.clear(); CString cstrOneCookies = *it; CString cstrSeperator = =; StaticUtility::StringSplit(cstrOneCookies, cstrSeperator, vecTemp); CString cstrKey; CString cstrVal; if (vecTemp.size() == 2) { cstrKey = vecTemp[0]; cstrVal = vecTemp[1]; } if(cstrKey.Compare(userId) == 0) { cstrCookieUid = cstrVal; break; } } }

同理,判断登录也是在返回的信息中拿cookie信息,再进行下一步操作。

?

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: