模拟一个网站网页的登录界面来实现自动登录.

icefairy 2009-09-24 02:18:10
最好有个能用的例子,例子最好是126邮箱.

这个函数中
AfxParseURL(strURL,dwServiceType,strServer,strObject,nPort)
第一个参数,怎么写,好像是URL格式.
...全文
394 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sp_hawk 2009-11-11
  • 打赏
  • 举报
回复
有需要搞定验证码的可以联系我,提供dll供你调用,识别率80%-99%,当然,像Google那种连人都无法识别的验证码就不行了。搞非法活动的不要找我,我的邮箱sp_bird@sina.com.
fangle6688 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 icefairy 的回复:]
怎么POST登陆包?? 呵呵
[/Quote]

通常有两种方法:

1、使用MS WebBrowser控件,程序内嵌一个浏览器,实现浏览器的自动化操作
2、用截包工具拦截浏览器登录时发出的数据包,照抄其格式,用socket直接发包到服务器
fangle6688 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jameshooo 的回复:]
2楼的方法基本上不可能实现,尤其是第4步,还没有哪个OCR有本事“认出”现代验证码中需要的信息。
唯一可行的方法就是把验证码图片显示在自己的窗口上,让用户来识别和输入。
[/Quote]

呵呵,普通的OCR模块是不行
专门针对验证码写个OCR可行性还是很高的
偶业余搞过一个,大致就四个步骤:
1、降噪算法除杂色杂点
2、灰度算法转换成黑白像素点阵
3、缩放旋转
4、字库匹配
效果还不错,大部分验证码都能搞定
icefairy 2009-09-25
  • 打赏
  • 举报
回复
先去看看
MoXiaoRab 2009-09-25
  • 打赏
  • 举报
回复
Post登陆包就通过WinInet就可以了,如果不考虑别的因素,你就是想Post一段请求给服务器的话

参考

参考
icefairy 2009-09-25
  • 打赏
  • 举报
回复
各位大牛们,能不能讲解下 怎么怎么POST登陆包?具体些,小弟还是新手,对那些操作基本都不明白
jameshooo 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fangle6688 的回复:]
呵呵,普通的OCR模块是不行
专门针对验证码写个OCR可行性还是很高的
偶业余搞过一个,大致就四个步骤:
1、降噪算法除杂色杂点
2、灰度算法转换成黑白像素点阵
3、缩放旋转
4、字库匹配
效果还不错,大部分验证码都能搞定
[/Quote]

你的这种处理方式肯定搞不定谷歌的验证码,注册一个GMAIL邮箱,看看它的验证码,人眼识别出来都困难,更别说程序了,它的几个特点:都是英文字母;字母之间排得非常紧密;字母严重变形。
还有谷歌的下一代验证码系统,通过把图片旋转到正确的位置来表示验证通过,程序完全没有可能代替用户。
maple_zhj 2009-09-25
  • 打赏
  • 举报
回复
现在字符图片,可是越来越BT了,没那么容易识别的。
jameshooo 2009-09-24
  • 打赏
  • 举报
回复
2楼的方法基本上不可能实现,尤其是第4步,还没有哪个OCR有本事“认出”现代验证码中需要的信息。
唯一可行的方法就是把验证码图片显示在自己的窗口上,让用户来识别和输入。
MoXiaoRab 2009-09-24
  • 打赏
  • 举报
回复
用WinInet函数发送
SendRequest ====
icefairy 2009-09-24
  • 打赏
  • 举报
回复
怎么POST登陆包?? 呵呵
fangle6688 2009-09-24
  • 打赏
  • 举报
回复
模拟登录没那么麻烦,直接用socket按照HTTP协议发登录包就行了

难点在于“验证码”,你的程序必须:

1、Get登录页面
2、获取验证码链接地址
3、下载验证码图片
4、调用OCR模块扫描验证码图片,“认出”其中的数字或文字
5、POST登录包
icefairy 2009-09-24
  • 打赏
  • 举报
回复
 CString strObject; 
INTERNET_PORT nPort;
CString strFormData;
DWORD dwServiceType;
CInternetSession g_Session_HG("My Session");
CString strContent="";
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;

CString strURL="www.126.com";

CString strRetMsg;
strFormData="user=yuecaipeng&password=861124&style=-1&remUser=checked&username=yuecaipeng@126.com";
CString strServer="";


if(!AfxParseURL(strURL,dwServiceType,strServer,strObject,nPort)||
dwServiceType != INTERNET_SERVICE_HTTP)
{
return ;
}
pServer = g_Session_HG.GetHttpConnection(strURL,nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject);//NULL,1,NULL,NULL,

// pFile->AddRequestHeaders("Content-Type:text/html; charset=gb2312");


BOOL result = pFile->SendRequest(NULL,0,
(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
DWORD dwRet;
pFile->QueryInfoStatusCode(dwRet);

if (dwRet != HTTP_STATUS_OK)
{
return ;
}

CString cookie;
pFile->QueryInfo(HTTP_QUERY_SET_COOKIE,cookie);
if( cookie!="" )
g_Session_HG.SetCookie(strURL,"",cookie);


这是我的代码,不知道哪里有问题

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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