也算是调试网页通信的吧, 拿VC知识库开发论坛做实验品,其他很多论坛的登陆方式也差不多
#include "Afxinet.h" //要使用的头文件
void CHttpDlg::OnLogin()
{
//分析网页登陆的话,可以用OD载入IE浏览器调试
UpdateData();
//登陆VC知识库开发论坛
CString strUrl = "http://www.vckbase.com/SYS/login/?from=/bbs/bbsmain.asp";
CInternetSession m_nInternet;
/*对应下断点bp InternetOpenA*/
CHttpFile *pHttpFile = (CHttpFile*)m_nInternet.OpenURL(strUrl);
DWORD dwHttpStatus = 0;
if(pHttpFile == NULL) return;
/*对应下断点bp HttpQueryInfoA*/
if(!pHttpFile->QueryInfoStatusCode(dwHttpStatus)) return;
//打开网页是否成功?
if(dwHttpStatus < 200 || dwHttpStatus >= 300) return ;
char pBuffer[10*1024];
DWORD temp = 10*1024;
UINT nRead = 0;
CString strPostHeader=_T("Referer: http://www.vckbase.com/SYS/login/? /
from=/bbs/bbsmain.asp/r/nAccept-Language: zh-cn/r/nContent-Type: /
application/x-www-form-urlencoded..Accept-Encoding: gzip, deflate");
CString strSend;
/*
//读取网页信息
::ZeroMemory(pBuffer, 10*1024);
pHttpFile->Read(pBuffer, 10*1024);
if (*(PWORD)pBuffer != 0)
{
AfxMessageBox(pBuffer);
}
*/
if (m_SaveCookie)
strSend.Format("userid=%s&password=%s&savecookie=true", m_user, m_pass);
else
strSend.Format("userid=%s&password=%s", m_user, m_pass);
strSend += "&gclsid=501&from=%2Fbbs%2Fbbsmain.asp&imageField.x=9&imageField.y=2";
/*对应下断点bp InternetConnectA*/
//连接www.vckbase.com,端口是80
CHttpConnection* pConnection = m_nInternet.GetHttpConnection("www.vckbase.com",INTERNET_DEFAULT_HTTP_PORT, "","");//, INTERNET_DEFAULT_HTTPS_PORT);
/*对应下断点bp HttpOpenRequestA*/
//POST参数,操作是用户登陆
CHttpFile *pFile=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/SYS/login/login.aspx");
/*对应下断点bp HttpSendRequestA*/
//发送出去
BOOL result = pFile->SendRequest(strPostHeader,-1, (LPVOID)(LPCTSTR)strSend, strSend.GetLength());
if (result)
{// 注意第一个参数 HTTP_QUERY_RAW_HEADERS_CRLF
::ZeroMemory(pBuffer, 10*1024);
/*对应下断点bp HttpQueryInfoA*/
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, pBuffer, &temp, NULL);
if (*(PWORD)pBuffer != 0)
AfxMessageBox(pBuffer);
//如果登陆成功的话,一般都有 Set Cookie:的字样
}
else
{
//.... 发送失败
}
//操作InternetCloseHandle
pHttpFile->Close();
pConnection->Close();
m_nInternet.Close();
}
#include "Afxinet.h" //要使用的头文件
void CHttpDlg::OnLogin()
{
//分析网页登陆的话,可以用OD载入IE浏览器调试
UpdateData();
//登陆VC知识库开发论坛
CString strUrl = "http://www.vckbase.com/SYS/login/?from=/bbs/bbsmain.asp";
CInternetSession m_nInternet;
/*对应下断点bp InternetOpenA*/
CHttpFile *pHttpFile = (CHttpFile*)m_nInternet.OpenURL(strUrl);
DWORD dwHttpStatus = 0;
if(pHttpFile == NULL) return;
/*对应下断点bp HttpQueryInfoA*/
if(!pHttpFile->QueryInfoStatusCode(dwHttpStatus)) return;
//打开网页是否成功?
if(dwHttpStatus < 200 || dwHttpStatus >= 300) return ;
char pBuffer[10*1024];
DWORD temp = 10*1024;
UINT nRead = 0;
CString strPostHeader=_T("Referer: http://www.vckbase.com/SYS/login/? /
from=/bbs/bbsmain.asp/r/nAccept-Language: zh-cn/r/nContent-Type: /
application/x-www-form-urlencoded..Accept-Encoding: gzip, deflate");
CString strSend;
/*
//读取网页信息
::ZeroMemory(pBuffer, 10*1024);
pHttpFile->Read(pBuffer, 10*1024);
if (*(PWORD)pBuffer != 0)
{
AfxMessageBox(pBuffer);
}
*/
if (m_SaveCookie)
strSend.Format("userid=%s&password=%s&savecookie=true", m_user, m_pass);
else
strSend.Format("userid=%s&password=%s", m_user, m_pass);
strSend += "&gclsid=501&from=%2Fbbs%2Fbbsmain.asp&imageField.x=9&imageField.y=2";
/*对应下断点bp InternetConnectA*/
//连接www.vckbase.com,端口是80
CHttpConnection* pConnection = m_nInternet.GetHttpConnection("www.vckbase.com",INTERNET_DEFAULT_HTTP_PORT, "","");//, INTERNET_DEFAULT_HTTPS_PORT);
/*对应下断点bp HttpOpenRequestA*/
//POST参数,操作是用户登陆
CHttpFile *pFile=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/SYS/login/login.aspx");
/*对应下断点bp HttpSendRequestA*/
//发送出去
BOOL result = pFile->SendRequest(strPostHeader,-1, (LPVOID)(LPCTSTR)strSend, strSend.GetLength());
if (result)
{// 注意第一个参数 HTTP_QUERY_RAW_HEADERS_CRLF
::ZeroMemory(pBuffer, 10*1024);
/*对应下断点bp HttpQueryInfoA*/
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, pBuffer, &temp, NULL);
if (*(PWORD)pBuffer != 0)
AfxMessageBox(pBuffer);
//如果登陆成功的话,一般都有 Set Cookie:的字样
}
else
{
//.... 发送失败
}
//操作InternetCloseHandle
pHttpFile->Close();
pConnection->Close();
m_nInternet.Close();
}