WinInet API解决思路
WinInet API
学习一下WinInet API来实现表单提交,以开心网为测试,代码如下
UpdateData(true);
CString strHeaders =_T("Content-Type: application/x-www-form-urlencoded");
CString strFormData = _T("email=");
strFormData+=m_username;
strFormData+=_T("&password=");
strFormData+=m_password;
CInternetSession session;
CHttpConnection* pConnection =session.GetHttpConnection(_T("kaixin001.com"));
CHttpFile* pFile =pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,_T("home"));
BOOL result = pFile->SendRequest(strHeaders,(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
为何登陆不了,请高手指点
------解决方案--------------------
学习一下WinInet API来实现表单提交,以开心网为测试,代码如下
UpdateData(true);
CString strHeaders =_T("Content-Type: application/x-www-form-urlencoded");
CString strFormData = _T("email=");
strFormData+=m_username;
strFormData+=_T("&password=");
strFormData+=m_password;
CInternetSession session;
CHttpConnection* pConnection =session.GetHttpConnection(_T("kaixin001.com"));
CHttpFile* pFile =pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,_T("home"));
BOOL result = pFile->SendRequest(strHeaders,(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
为何登陆不了,请高手指点
------解决方案--------------------
- C/C++ code
CInternetSession* m_pSession; CHttpConnection* m_pCon; m_pCon = m_pSession->GetHttpConnection(HTTP_SERVER, 0, HTTP_SERVER_PORT); if (m_pCon != NULL) { CHttpFile* pFile = NULL; try { pFile = m_pCon->OpenRequest(CHttpConnection::HTTP_VERB_GET, lpszCommand, lpszRefer); if (pFile != NULL) { pFile->AddRequestHeaders(ACCEPT_TYPE); pFile->AddRequestHeaders(ACCEPT_LANGUAGE); pFile->AddRequestHeaders(ACCEPT_ENCODING); pFile->AddRequestHeaders(CONNECTION_TYPE); pFile->SendRequest(); DWORD dwStatusCode = 0; pFile->QueryInfoStatusCode(dwStatusCode); if (dwStatusCode != 200) { pFile->Close(); delete pFile; } } } catch (CInternetException *pEx) { CString szError; pEx->GetErrorMessage(szError.GetBuffer(MAX_PATH), MAX_PATH); szError.ReleaseBuffer(); TRACE("SendRequest exception. Error message : %s\n", szError); pEx->Delete(); } }
------解决方案--------------------
这种问题的解决方法最好是抓包,从浏览器上登录一次,看下数据包,和你程序发出和接收的数据包或者HTTP Request做对比,看看少了什么或者多了什么。
------解决方案--------------------
winnet API 超时设置有问题
^_^
所有设置一个等待线程