问题描述
我要抓取方正教务系统中的课程表,但是要凭借VIEWSTATE才能post到对应班级的课程表页面,每个班级课程表的VIEWSTATE不一样,有什么方法获取VIEWSTATE
解决方案
解决方案二:
VIEWSTATE应该是服务器端对象!无法获取但是客户端页面有VIEWSTATE相关字段信息!应该不是必须要这个才能的!你抓包看下它提交的参数就好了!请求的时候带上cookie就好了!!
解决方案三:
但是我把VIEWSTATE去掉后,就显示不出课程表来,还有一个问题,我用HttpWatch查看它发过去的VIEWSTATE,跟要打开的那个网页里隐藏的那个VIEWSTATE不一样,HttpWatch里发过去的那个VIEWSTATE解出来完全是乱码,要打开的那个网页里隐藏的那个VIEWSTATE解出来可以看到信息,不知是不是加密过
解决方案四:
在前一个网页的源代码里面,可以直接取出来
解决方案五:
引用3楼liucqa的回复:
在前一个网页的源代码里面,可以直接取出来
但是像我截图所示,同一个选择页面,选择不同班级,出来的课程表不一样,这种情况下,前一个网页里面会包含要打开的网页的VIEWSTATE吗?
解决方案六:
ASP.NET页面里有hidden的viewstateinput,包含一大堆编码过的数据。默认情况下,应该还是可以能够解的开的。但这个是留有重写接口的,所以有可能viewstate是被另外的算法加密过的。
解决方案七:
引用5楼wjq的回复:
ASP.NET页面里有hidden的viewstateinput,包含一大堆编码过的数据。默认情况下,应该还是可以能够解的开的。但这个是留有重写接口的,所以有可能viewstate是被另外的算法加密过的。
加密倒是没怎么加密过,看起来就是做了一些简单的处理,比如本来Base64的+,变成了%2B,/变成了%2F,=变成了%3D,但是我在想,能不能找出这个Base64的编码规律,然后自己根据需要编一个,然后发送过去
解决方案八:
引用6楼a8496112的回复:
Quote: 引用5楼wjq的回复:
ASP.NET页面里有hidden的viewstateinput,包含一大堆编码过的数据。默认情况下,应该还是可以能够解的开的。但这个是留有重写接口的,所以有可能viewstate是被另外的算法加密过的。加密倒是没怎么加密过,看起来就是做了一些简单的处理,比如本来Base64的+,变成了%2B,/变成了%2F,=变成了%3D,但是我在想,能不能找出这个Base64的编码规律,然后自己根据需要编一个,然后发送过去
很简单的url编码,也叫百分号编码。C#有类库
解决方案九:
引用7楼liucqa的回复:
Quote: 引用6楼a8496112的回复:
Quote: 引用5楼wjq的回复:
ASP.NET页面里有hidden的viewstateinput,包含一大堆编码过的数据。默认情况下,应该还是可以能够解的开的。但这个是留有重写接口的,所以有可能viewstate是被另外的算法加密过的。加密倒是没怎么加密过,看起来就是做了一些简单的处理,比如本来Base64的+,变成了%2B,/变成了%2F,=变成了%3D,但是我在想,能不能找出这个Base64的编码规律,然后自己根据需要编一个,然后发送过去
很简单的url编码,也叫百分号编码。C#有类库
这个百分号编码是依据网页的Viewstate进行编码,然后再稍作处理的吧,那viewstate究竟是怎么形成的呢?
解决方案十:
很简单的url编码,也叫百分号编码。C#有类库
这个百分号编码是依据网页的Viewstate进行编码,然后再稍作处理的吧,那viewstate究竟是怎么形成的呢?
网站会返回这个参数,一般是加密数据,直接抓就行了
解决方案十一:
引用6楼a8496112的回复:
Quote: 引用5楼wjq的回复:
ASP.NET页面里有hidden的viewstateinput,包含一大堆编码过的数据。默认情况下,应该还是可以能够解的开的。但这个是留有重写接口的,所以有可能viewstate是被另外的算法加密过的。加密倒是没怎么加密过,看起来就是做了一些简单的处理,比如本来Base64的+,变成了%2B,/变成了%2F,=变成了%3D,但是我在想,能不能找出这个Base64的编码规律,然后自己根据需要编一个,然后发送过去
asp.net应用程序服务器端会自动验证这个__ViewState的内容的MD5签名,防止流氓软件从浏览器端篡改它的内容。
解决方案十二:
引用10楼sp1234的回复:
Quote: 引用6楼a8496112的回复:
Quote: 引用5楼wjq的回复:
ASP.NET页面里有hidden的viewstateinput,包含一大堆编码过的数据。默认情况下,应该还是可以能够解的开的。但这个是留有重写接口的,所以有可能viewstate是被另外的算法加密过的。加密倒是没怎么加密过,看起来就是做了一些简单的处理,比如本来Base64的+,变成了%2B,/变成了%2F,=变成了%3D,但是我在想,能不能找出这个Base64的编码规律,然后自己根据需要编一个,然后发送过去
asp.net应用程序服务器端会自动验证这个__ViewState的内容的MD5签名,防止流氓软件从浏览器端篡改它的内容。
解决方案十三:
__viewstate里面是页面及控件状态值,查看源码就能看到,由服务器发送到客户端时,已经加密,即使能解密,里面也没有你要的数据和ViewState["KEY"]不同,这个里面存有页面级可以访问的数据,可惜是在服务端。没有使用ViewState["KEY"]的页面,也有__viewstate呢
解决方案十四:
__ViewState没有进行什么加密,只是对序列化的内容进行base64编码而已。不过__ViewState内容包括了复杂而完整的控件树的所有状态(随便一个GridView可能就占数万个ViewState单元),每一次输出的内容都有些不一样(服务器端有状态改变),不是那么轻易从浏览器端去乱改的。就算能改了,传给服务器时也会被人家检测出来MD5改变了而报错