使用httpwebrequest模拟登录后的cookie
theks 2012-01-13 12:54:14 有过这方面经验的兄弟们回复一下。。
我用HttpWebRequest模拟某网站的登录,用户名和密码是post方法提交的。
它在登录成功后并没有立即写入cookie,而是在Response的HTML中,通过请求图片URL和js脚本访问别的网址,根据session再写cookie。
由于这网站包括论坛和其它模块(包括子域名和别的域名,五六个吧),所以有多个分别写入cookie的请求对应各个子模块,做的单点登录。比如:
通过请求<img src="http://www.a.com/verify/?一些参数.." />写入cookie "web_member_id";
通过请求<script type="text/javascript" src="http://bbs.a.com/verify/?一些参数.."></script>写入cookie "bbs_member_id";
我只用到网站的,就再次请求写入网站cookie的js,把cookie写入CookieContainer,浏览登录后的页面都没问题。
问题出在下一步,我要发布一些东西到后台(保存到数据库),post提交表单时,报"Restricted access!"访问受限。。用HttpAnalyzer查看构造的post Data跟在浏览器中真实提交的真实数据是一样的,只是cookie不一样。
Reissue Request重新发送请求,模拟提交总是Restricted access,真实提交总是成功。
我猜测原因如下:
1.cookie中缺少东西。所以我打算把所有的cookie都写入,模拟真实的登录。
在获得登录成功后响应的HTML中,因为它有多个写入cookie的请求,我觉得用正则表达式提出来分别去请求一遍太费事了,有没有办法执行这段html取得全部的cookie保存下来?
注意,我这项目是个后台服务,所以没有界面,也就用不到WebBrowser控件。
2.该网站有别的限制模拟提交的方法。
这方面完全无法着手啊。
这网站是用php写的。