其实 VIEWSTATE 不用太在意,倒是 JTCookieID 需要注意,这个才应该是服务器上用来维护 Session 的那个 Cookie。
所以,你用 httpclient 的时候,不能上来就直接发到“POST /PersonLogin.aspx”上,因为那样的话,服务器上还没有建立一个有效的 Session。 你需要先用 HttpClient 发一个别的什么请求(一般是登录窗口那个画面,也可以是其它任何别的页面,反正只是为了让服务器知道有新的客户端要上来了,
立刻新创建一个 Session,然后把相应的 Cookie 发回给 HttpClient),然后你再用 HttpClient 去“POST /PersonLogin.aspx”,HttpClient
会把刚才得到的 Cookie 自动发回去。 一下内容转载自:http://www.alixixi.com/Dev/Web/ASPNET/aspnet1/2007/2007070765888.html 在写Internet应用程序的时候,常常需要处理用户登录的情况。一般来说,对于这种情况,我们是使用程序来模拟用户在Web页面上填写用户名、密码并 提交的过程。当用户在Web页面上输入了用户名、密码并提交之后,实际上是触发了一个POST请求,在这个请求中包含有用户名、密码等信息。因此,我们只 要在程序中将相关信息封装成一条POST请求,并将它发送给Web Server,基本上就能实现登录了。以MFC为例,下面的这段代码模拟了一个登录过程:   CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");   // name = "sam", password = "123", action = "submit"   CString strFormData = _T("name=sam&password=123&action=submit");   CInternetSession session;   CHttpConnection* pConnection =   session.GetHttpConnection(_T("ServerNameHere"));   CHttpFile* pFile =   pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,   _T("FormActionHere"));   BOOL result = 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用它来保存页面的状态信息,以便在页面提交失败时,能够恢复页面的状态。它是通过页面中的一个隐藏的域来定义的,如果通过浏览器来View Source的话,可以看到它是如下的一行代码   它的value值正是我们所需要的,我们只要从登录页面中解析出这个__VIEWSTATE的value,我们的问题就能够得到解决了。  
 仔细看一下,ViewState的值是经过编码的,先不管它,直接将它从页面中取出,和登录信息一起组成POST请求,发送给Server,结果如何
呢?失败了L。对比一下Sniffer的结果和页面中ViewState的value,我们会发现,它们之间还是有些许不同的。原来,页面源码中的
ViewState值是经过Base64编码的,而当它被发送给Web Server时,为了保证传输的正确,浏览器会将它转换成URL编码,当Web
Server接收到ViewState之后,当然会先将它从URL编码解码为Base64编码再交给Asp.Net处理。看来我们需要将
ViewState的值在进行一边URL编码处理,这样就能够成功模拟整个登录过程了J。

最新文章

  1. webpack
  2. AngularJS 中的Promise --- $q服务详解
  3. java使用sax解析xml
  4. WinForm程序中的类TextBox的自定义控件, 添加失去焦点的功能
  5. HDU 3911 Black And White(线段树区间合并+lazy操作)
  6. wine install 32bit netframewok
  7. 四则运算.html
  8. JavaScript之面向对象学习四原型对象的动态性
  9. 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)
  10. ASP.NET Web安装程序
  11. Javaweb 项目内所有页面都是404问题
  12. C++ 类模板与模板类详解
  13. pytest 14 使用自定义标记mark
  14. Python_day1 Learning record
  15. 3 字节的 UTF-8 序列的字节 2 无效
  16. [HNOI2018]寻宝游戏
  17. windows 下编程实现打印日志
  18. 10BASE
  19. .NET零基础入门06:面向对象入门
  20. c++ 双向链表 的查找和删除

热门文章

  1. java基础语法笔记
  2. jquery的事件绑定
  3. MongoDB中的分组
  4. cognos 10.2.2 Framework manager使用”数据源”新建查询主题
  5. Runtime 在IOS中的详细使用
  6. iOS-开发日志-UITextView介绍
  7. swift-02代码流程的控制
  8. 初尝 Perl
  9. jQuery表格操作
  10. requirejs下载与配置