如何实现论坛的自动登录?

shen_wei 2010-12-31 04:20:41
在VC的窗口界面上,输入用户名和密码,单击按钮,实现某一论坛用户的登录。

这样的功能如何实现出来。请教大牛们来解决。。。

望大家给出来详细的实现方法。。。谢谢!
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
freely76 2010-12-31
  • 打赏
  • 举报
回复
上面最后一行多打了个'}'。

此问题的关键是要获取登录时向网站POST的数据,用抓包工具拦下当你在网站登录页面里按登录按钮时发出的数据即可。

当然,像CDSN这个网站登录时是要校验码的,这样用软件登录就没那么容易了,校验码就是为了防你用软件登录。
Eleven 2010-12-31
  • 打赏
  • 举报
回复
用抓包工具抓个包,然后模拟提交数据,验证码的话,可以将它下载到本地,然后显示在软件界面上
freely76 2010-12-31
  • 打赏
  • 举报
回复
用抓包工具HttpAnalyzer把你登录网站时的提交数据抓下来,然后在VC里用程序实现向网站提交数据就行了。
代码如下:(以登录开心网为例)

m_edit_accounts 为输入用户名的文本框
m_edit_password 为输入密码的文本框

//定义一个结构
struct strHD
{
CString host;
CString post;
CString page;
CString refer;
CString data;
};

void CKaixinDlg::OnBtnLogin()
{
CString csName, csPassword;

m_edit_accounts.GetWindowText(csName);
csName.TrimLeft(); csName.TrimRight();

m_edit_password.GetWindowText(csPassword);
csPassword.TrimLeft(); csPassword.TrimRight();

strHD strHttpData;
strHttpData.host = "www.kaixin001.com";
strHttpData.post = "www.kaixin001.com";
strHttpData.page = "/login/login.php";
strHttpData.refer = "www.kaixin001.com";
strHttpData.data = "email=";
strHttpData.data += csName;
strHttpData.data += "&password=";
strHttpData.data += csPassword;
strHttpData.data += "&url=/home/";

CInternetSession* pSession=NULL;
CHttpConnection* pConnection=NULL;
CHttpFile* pFile=NULL;

//建立与网站的连接
pSession = new CInternetSession(NULL, 1, INTERNET_OPEN_TYPE_PRECONFIG);
pConnection = pSession->GetHttpConnection(pHttpData->host, INTERNET_PORT(80));
pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, pHttpData->page);

CString strHeaders, strFormData;

//以下向提交数据中添加HTTP头
strHeaders = "Accept: */*\r\n";

//参考地址,代表用户从该URL发出登录请求,有些网站会读取此参数来判断用户是否用软件自动登录的
strHeaders += "Referer: http://";
strHeaders += pHttpData->refer;
  strHeaders += "\r\n";

  strHeaders += "Accept-Language: zh-cn\r\n";
strHeaders += "Content-Type: application/x-www-form-urlencoded\r\n";
strHeaders += "UA-CPU: x86\r\n";

strHeaders += "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; CIBA)\r\n";

//主机名
strHeaders += "Host: ";
strHeaders += pHttpData->host;
strHeaders += "\r\n";

strHeaders += "Connection: Keep-Alive\r\n";
strHeaders += "Cache-Control: no-cache\r\n";

//HTTP头后面就是要提交的数据了,服务器处理返回的信息在pFile中
strFormData = pHttpData->data;

pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength()); //提交所有数据
}





}
大蓝头 2010-12-31
  • 打赏
  • 举报
回复
通过WinInet来实现,先在IE中登录论坛,同时通过HttpAnalyzer抓取登录论坛的HTTP头和消息体,然后使用WinInet来模拟登录。具体如下:
CInternetSession session;
session.Creat...
CHttpConnection *pConn = session.GetConnetion()...
CHttpRequest...
将你的信息发送上去,
如果有验证码的话,的简单的没什么变形和干扰的可以使用OCR来识别,复杂的需要模式匹配。
具体实现可以参考:
http://topic.csdn.net/u/20101222/10/423abdb7-57f8-4cf3-9276-d4ba37626804.html
shenyi0106 2010-12-31
  • 打赏
  • 举报
回复
如果没有图片验证码的应该很好搞
看看CHttpConnect,应该可以
难的是图片验证码

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧