Webbrowser向网站服务器Post信息实现自动登录的问题

sinat_30784251 2016-08-19 05:21:45
我的MFC对话框程序中添加了一个webbrowser控件,我想在程序初始化的时候就向一个网站服务器post登录信息,然后当我的程序显示出来的时候就是已经登录的界面了。请问大概该怎么实现呢?是向登录网址post数据吗?该怎么post,麻烦懂的大神给我提点下,具体问题我可以百度,麻烦大家了。
...全文
1266 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_30784251 2016-09-02
  • 打赏
  • 举报
回复
引用 10 楼 u011360860 的回复:
[quote=引用 9 楼 CharlesSimonyi 的回复:] 一般的网站,在同进程中用wininet进行POST成功以后,刷新一下webbrowser就已经是登录状态了。 少数网站不行,可以用chrome浏览器看看这个网站登录后有哪些cookie,然后POST成功时,用CHttpFile::QueryInfo结合HTTP_QUERY_SET_COOKIE标志获取Cookie,然后用InternetSetCookie设置一下,然后刷新webbrowser
的确是这样,我之前是自己在外部定义的POST消息,没有和webbrowser控件关联起来,然后用web.Navitate发送POST消息就成功了。感谢前辈指点[/quote] 麻烦大神看看这个帖子 http://bbs.csdn.net/topics/392013590
sinat_30784251 2016-09-02
  • 打赏
  • 举报
回复
引用 2 楼 CharlesSimonyi 的回复:
首先在浏览器中抓包,看看手工登录的时候它是怎么POST的,然后按照它POST的数据格式,尝试用Wininet进行POST,楼上说的这些类就是MFC对Wininet的封装
麻烦看看这个帖子 http://bbs.csdn.net/topics/392013590
sinat_30784251 2016-09-02
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
CInternetSession::OpenURL CHttpFile::SendRequest()
麻烦看看 http://bbs.csdn.net/topics/392013590
encoderlee 2016-08-31
  • 打赏
  • 举报
回复
CInternetSession CHttpConnection CHttpFile 我是说一般情况下,在同一个进程中用这些类进行POST,然后webbrowser刷新一下,就是已经登录的状态了。它们自己会关联起来,大多数网站是可行的,你可以试一试其它网站,少数网站不行(你遇到的这个网站),需要另行处理。
lvxingchenlv 2016-08-31
  • 打赏
  • 举报
回复
引用 9 楼 CharlesSimonyi 的回复:
一般的网站,在同进程中用wininet进行POST成功以后,刷新一下webbrowser就已经是登录状态了。 少数网站不行,可以用chrome浏览器看看这个网站登录后有哪些cookie,然后POST成功时,用CHttpFile::QueryInfo结合HTTP_QUERY_SET_COOKIE标志获取Cookie,然后用InternetSetCookie设置一下,然后刷新webbrowser
的确是这样,我之前是自己在外部定义的POST消息,没有和webbrowser控件关联起来,然后用web.Navitate发送POST消息就成功了。感谢前辈指点
encoderlee 2016-08-30
  • 打赏
  • 举报
回复
一般的网站,在同进程中用wininet进行POST成功以后,刷新一下webbrowser就已经是登录状态了。 少数网站不行,可以用chrome浏览器看看这个网站登录后有哪些cookie,然后POST成功时,用CHttpFile::QueryInfo结合HTTP_QUERY_SET_COOKIE标志获取Cookie,然后用InternetSetCookie设置一下,然后刷新webbrowser
lvxingchenlv 2016-08-30
  • 打赏
  • 举报
回复
引用 5 楼 CharlesSimonyi 的回复:
看POST返回的数据是否是登录后的HTML内容。 如果是,则将WebBrowser导航到登录后的网址,看是否处于已登录状态
问题已经解决,我使用的Navigate2来post登陆请求,然后直接就可以跳转到登陆之后的页面了
lvxingchenlv 2016-08-29
  • 打赏
  • 举报
回复
引用 2 楼 CharlesSimonyi 的回复:
首先在浏览器中抓包,看看手工登录的时候它是怎么POST的,然后按照它POST的数据格式,尝试用Wininet进行POST,楼上说的这些类就是MFC对Wininet的封装
我已经POST成功并能成功接收数据,但是不知道接收的数据该怎么处理才能直接显示到登陆过后的页面。。。请问该怎么处理这些数据呢 CInternetSession session; session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 1000 * 20); session.SetOption(INTERNET_OPTION_CONNECT_BACKOFF, 1000); session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1); CHttpConnection* pConnection = session.GetHttpConnection( TEXT("XXX.XXX.XXX.XXX"), (INTERNET_PORT)8080); CHttpFile* pFile = pConnection->OpenRequest( CHttpConnection::HTTP_VERB_POST, TEXT("XXXX"), NULL, 1, NULL, TEXT("HTTP/1.1"), INTERNET_FLAG_RELOAD); //需要提交的数据 CString szHeaders = L"Content-Type: application/x-www-form-urlencoded;"; //下面这段编码,则是可以让服务器正常处理 CString aaa = _T("userName=") + UserId + _T("&passWord=") + PassWord; int len =WideCharToMultiByte(CP_ACP,0,aaa,-1,NULL,0,NULL,NULL); char *strFormData =new char[len +1]; WideCharToMultiByte(CP_ACP,0,aaa,-1,strFormData,len,NULL,NULL ); //--------------------------------------------------------------------------------------------------------发送请求 pFile->SendRequest( szHeaders, szHeaders.GetLength(), (LPVOID)strFormData, strlen(strFormData)); DWORD dwRet; pFile->QueryInfoStatusCode(dwRet);
lvxingchenlv 2016-08-29
  • 打赏
  • 举报
回复
引用 5 楼 CharlesSimonyi 的回复:
看POST返回的数据是否是登录后的HTML内容。 如果是,则将WebBrowser导航到登录后的网址,看是否处于已登录状态
使用web.Navigate的话,是没有登陆的状态
lvxingchenlv 2016-08-29
  • 打赏
  • 举报
回复
引用 5 楼 CharlesSimonyi 的回复:
看POST返回的数据是否是登录后的HTML内容。 如果是,则将WebBrowser导航到登录后的网址,看是否处于已登录状态
返回的是登陆之后的HTML,然后应该如何导航呢,新手有些不太会请见谅,万分感谢前辈解答 我通过编译下面的HTML代码之后进入页面提示我:此页需要 AC_RunActiveContent.js <html lang="zh_cn"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="requiresActiveX=true" /> <meta name="description" content=""/> <meta name="keywords" content=""/> <title>XXXX</title> <link href="../../../16vs/resources/css/index/style.css" rel="stylesheet" type="text/css" /> <script language="javascript"> AC_FL_RunContent = 0; </script> <script language="javascript"> DetectFlashVer = 0; </script> <script src="http://192.168.1.16/web/resources/js/AC_RunActiveContent.js" language="javascript"></script> <script language="JavaScript" type="text/javascript"> <!-- function bbs(){ window.open("http://www.44vs.com/44bbs/forum.php"); } this.opener = undefined; //断开父窗口链接 // ----------------------------------------------------------------------------- // 全局变量 // 所需 Flash 的主版本号 var requiredMajorVersion = 16; // 所需 Flash 的次版本号 var requiredMinorVersion = 0; // 所需 Flash 的版本号 var requiredRevision = 0; // ----------------------------------------------------------------------------- // --> </script> <style type="text/css"> <!-- body { margin:auto; /* background:url(/web/resources/images/44vs/homepage/loginbeijing.jpg) no-repeat center top; */ } --> </style></head> <body bgcolor="#1b181f" leftMargin=0 topMargin=0 marginheight="0" marginwidth="0"> <div id="divId" align="center"> <!--影片中使用的 URL--> <!--影片中使用的文本--> <script language="JavaScript" type="text/javascript"> <!-- if (AC_FL_RunContent == 0 || DetectFlashVer == 0) { alert("此页需要 AC_RunActiveContent.js"); } else { var hasRightVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision); if(true) { // 如果我们检测到了可接受的版本 // 嵌入 Flash 影片 AC_FL_RunContent( 'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=16,0,0,0', 'width', '1140', 'height', '1280', 'src', 'http://192.168.1.16/web/resources/flash/gameLoaderQban?v35', 'quality', 'high', 'pluginspage', 'http://www.macromedia.com/go/getflashplayer', 'align', 'middle', 'play', 'true', 'loop', 'false', 'scale', 'showall', 'wmode', 'direct', 'devicefont', 'false', 'id', 'gameloaderqabn', 'bgcolor', '#1b181f', 'name', 'gameloaderqabn', 'menu', 'false', 'allowFullScreen', 'true', 'allowScriptAccess','always', 'movie', 'http://192.168.1.16/web/resources/flash/gameLoaderQban?v35', 'flashvars','userName=KillUser(1)&session=111111&enterSource=&userPic=&binding=&source=&CDNUrl=http://192.168.1.16&tencentVersion=v35', 'salign', '' ); //end AC code } else { window.location = 'http://192.168.1.16/web/skin/sitePage/downFlashPlayer.jsp'; } } function goHome(mess){ loginSuccess = 0; window.location='/'; } function loginSuccess(mess){ loginSuccess = 1; } // --> var loginSuccess = 0; window.onbeforeunload = function() { if(loginSuccess==1){ return 'XXXXXXXXXX'; } } </script> <noscript> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=16,0,0,0" width="1140" height="1280" id="gameloaderqabn" align="middle"> <param name="wmode" value="direct" /> <param name="allowScriptAccess" value="always" /> <param name="allowFullScreen" value="false" /> <param name="movie" value="http://192.168.1.16/web/resources/flash/gameLoaderQban.swf?v35" /> <param name="quality" value="high" /> <param name="bgcolor" value="#1b181f" /> <param name="menu" value="false" /> <embed src="http://192.168.1.16/web/resources/flash/gameLoaderQban.swf?v35" quality="high" bgcolor="#800000" swLiveConnect="true" width="1140" height="1280" id="gameloaderqabn" name="gameloaderqabn" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> </noscript> </div> </body> </html>
encoderlee 2016-08-29
  • 打赏
  • 举报
回复
看POST返回的数据是否是登录后的HTML内容。 如果是,则将WebBrowser导航到登录后的网址,看是否处于已登录状态
oyljerry 2016-08-20
  • 打赏
  • 举报
回复
webbrowser中用插入JavaScript来提交post数据
encoderlee 2016-08-19
  • 打赏
  • 举报
回复
首先在浏览器中抓包,看看手工登录的时候它是怎么POST的,然后按照它POST的数据格式,尝试用Wininet进行POST,楼上说的这些类就是MFC对Wininet的封装
Eleven 2016-08-19
  • 打赏
  • 举报
回复
CInternetSession::OpenURL CHttpFile::SendRequest()

18,356

社区成员

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

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