|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不可能天天有学习.net),我一同学说,你应该早就有作品啦。我惶惶然……程序|页面 在写Internet使用程序的时分,经常必要处置用户登录的情形。一样平常来讲,关于这类情形,我们是利用程序来摹拟用户在Web页面上填写用户名、暗码并提交的历程。当用户在Web页面上输出了用户名、暗码并提交以后,实践上是触发了一个POST哀求,在这个哀求中包括有效户名、暗码等信息。因而,我们只需在程序中将相干信息封装成一条POST哀求,并将它发送给WebServer,基础上就可以完成登录了。以MFC为例,上面的这段代码摹拟了一个登录历程:
CStringstrHeaders=_T("Content-Type:application/x-www-form-urlencoded");
//name="sam",password="123",action="submit"
CStringstrFormData=_T("name=sam&password=123&action=submit");
CInternetSessionsession;
CHttpConnection*pConnection=
session.GetHttpConnection(_T("ServerNameHere"));
CHttpFile*pFile=
pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
_T("FormActionHere"));
BOOLresult=pFile->SendRequest(strHeaders,
(LPVOID)(LPCTSTR)strFormData,strFormData.GetLength());
这个办法关于Asp页面很无效,但关于Asp.Net页面,偶然却不起感化,这是为何呢?
为了弄清出Asp.Net页面在处置登录时与Asp页面有何区分,我们必要利用Sniffer工具来跟踪Web服务器与扫瞄器之间的通信。经由跟踪会发明,Asp.Net页面在用户提交登录信息以后,仍旧是利用POST哀求将相干信息发送给服务器。所分歧的是,处置用户名、暗码等信息以外还多了一个__VIEWSTATE。假如在下面代码中的strFormData中加上一个经由过程Sniffer失掉的__VIEWSTATE的话,就可以够乐成摹拟出全部登录历程了。接上去的成绩就是,我们应当怎样取得这个__VIEWSTATE呢?
我们晓得,Asp.Net页面有一个ViewState属性,Asp.Net用它来保留页面的形态信息,以便在页面提交失利时,可以恢复页面的形态。它是经由过程页面中的一个埋没的域来界说的,假如经由过程扫瞄器来ViewSource的话,能够看到它是以下的一行代码
它的value值恰是我们所必要的,我们只需从登录页面中剖析出这个__VIEWSTATE的value,我们的成绩就可以够失掉办理了。
细心看一下,ViewState的值是经由编码的,先不论它,间接将它从页面中掏出,和登录信息一同构成POST哀求,发送给Server,了局怎样呢?失利了L。对照一下Sniffer的了局和页面中ViewState的value,我们会发明,它们之间仍是有些许分歧的。本来,页面源码中的ViewState值是经由Base64编码的,而当它被发送给WebServer时,为了包管传输的准确,扫瞄器会将它转换成URL编码,当WebServer吸收到ViewState以后,固然会先将它从URL编码解码为Base64编码再交给Asp.Net处置。看来我们必要将ViewState的值在举行一边URL编码处置,如许就可以够乐成摹拟全部登录历程了J。
参考
1.HOWTO:SimulateaFormPOSTRequestUsingWinInet,微软的KB文章,形貌了摹拟POST哀求的完成。
2.ASP.NETMaintainingtheViewState,ViewState的进门常识。
3.ViewState:AllYouWantedtoKnow,关于ViewState的深切会商。
4.ViewStateParser,想看看解码后的ViewState是甚么模样吗?尝尝这个Parser。
5.博客厅中的相干会商,这是我在办理这个成绩的过程当中,在博客厅写的Blog。你觉得数据库怎么样? |
|