其实 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。

asp.net viewstate的模拟登陆的更多相关文章

  1. C# 模拟登陆

    原理 我们知道,一般需要登录的网站,服务器和客户端都会有一段时间的会话保持,而这个会话保持是在登录时候建立的, 服务端和客户端都会持有这个KEY,在后续访问时,都需要核对这两个KEY是否一致. 而客户 ...

  2. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  3. Python模拟登陆新浪微博

    上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...

  4. PHP 之 CURL 模拟登陆并获取数据

    1.CURL模拟登陆的流程和步骤 2.tempnam 创建一个临时文件 3.使用CURL模拟登陆到PHP100论坛 <?php $cookie_file = tempnam('./temp',' ...

  5. NetworkComms V3 模拟登陆

    演示NetworkComms V3的用法 例子很简单 界面如下: 服务器端代码: 开始监听: //服务器开始监听客户端的请求 Connection.StartListening(ConnectionT ...

  6. pytho简单爬虫_模拟登陆西电流量查询_实现一键查询自己的校园网流量

    闲来无事,由于校园内网络是限流量的,查询流量很是频繁,于是萌生了写一个本地脚本进行一键查询自己的剩余流量. 整个部分可以分为三个过程进行: 对登陆时http协议进行分析 利用python进行相关的模拟 ...

  7. python模拟登陆知乎并爬取数据

    一些废话 看了一眼上一篇日志的时间 已然是5个月前的事情了 不禁感叹光阴荏苒其实就是我懒 几周前心血来潮想到用爬虫爬些东西 于是先后先重写了以前写过的求绩点代码 爬了草榴贴图,妹子图网,后来想爬婚恋网 ...

  8. php模拟登陆的两种实现方法分析

    php模拟登陆的实现方法分析 本文实例分析了php模拟登陆的实现方法.分享给大家供大家参考.具体分析如下: php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网.具体实例代码如下: 1)使 ...

  9. python 模拟登陆,请求包含cookie信息

    需求: 1.通过GET方法,访问URL地址一,传入cookie参数 2.根据地址一返回的uuid,通过POST方法,传入cooki参数 实现思路: 1.理解http的GET和POST差别 (网上有很多 ...

随机推荐

  1. 嵌入式Linux-linux连接脚本

    嵌入式Linux-linux连接脚本 介绍 每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出 ...

  2. DiscreteSeekBar使用简介,一个带气泡的SeekBar

    android自带的SeekBar样式比较古板,如果我们想让自己的SeekBar炫起来,那么可以考虑使用DiscreteSeekBar.DiscreteSeekBar是GitHub上的一个开源控件,地 ...

  3. Java基础知识强化之IO流笔记43:IO流练习之 复制文本文件的 5 种方式案例

     1. 案例分析: 分析: 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流. 通过该原理,我们知道我们应该采用字符流更方便一些. 而字符流有5种方式,所以做这个题目我们有5种方 ...

  4. 【转载】soapui基于持续集成工具自动化运行的调研姿势

    soapui中的testrunner.bat调研姿势,用于自动化测试副标题:soapui基于持续集成工具自动化运行的调研姿势 各位亲爱的同仁们,大家好吗?最近项目在搞持续集成工具,我们的测试用例都是基 ...

  5. 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。

    答:解1:  select top 10 * from A where id not in (select top 30 id from A) 解2:  select top 10 * from A ...

  6. char与varchar区别

    char:储存定长数据,长度不够,以空格填满.储存效率高. varchar: 变长数据,根据数据长度储存,节省空间,效率低.

  7. codeblocks 更改颜色主题

    Code::Blocks是一款优秀的C/C++编辑器,但默认的颜色为白底黑字,并且没有自带更多的主题配置.因此,各种颜色主题需要手动配置. 首先关闭codeblocks软件. 下载文件colour_t ...

  8. 【转载】NIO服务端序列图

    步骤一:打开ServerSocketChannel,用于监听客户端的连接,它是所有客户端连接的父管道,代码示例如下: ServerSocketChannel acceptorSvr = ServerS ...

  9. modelsim打开.wlf文件的方法(原创)

    运行vsim -c -l vsim.log -wlf vsim.wlf work.tb work.glbl之后,会在不启动modelsim的情况下完成仿真,并且会把仿真波形记录下来(以.wlf文件格式 ...

  10. (转)asp.net 高质量缩略图

    原文地址:http://www.cnblogs.com/Fooo/archive/2009/06/19/1506381.html using System.Drawing; ------------- ...