使用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写的。
...全文
406 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
大飞飞虫 2012-01-13
  • 打赏
  • 举报
回复
HttpWebRequest 的方式的话表示你还得自己去解析获得到的 response HTML, 然后逐个再用 HttpWebRequest 去请求这些URL才能写COOKIE,

因为你不具备执行HTML的能力,必须全套模拟它的做法
theks 2012-01-13
  • 打赏
  • 举报
回复
我用HttpAnalyzer把正常提交的cookie一项项地去掉重发请求,找到了结果,确实是少了个cookie项,多请求一张图片解决了。
结帖了
theks 2012-01-13
  • 打赏
  • 举报
回复
#3楼,
谢谢。
通过HttpAnalyzer截获的结果看,CookieContainer没什么问题,只是我故意少写入了一些觉得可能无关的cookie项,因为这网站写全部的cookie要分别请求七、八次,太费事。
我的项目是一键发布到同行业的多个网站,这只是其中一个网站,不能响应太慢。
我试下不用CookieContainer,遍历cookie写入吧,不过应该不是这原因。
机器人 2012-01-13
  • 打赏
  • 举报
回复
.net 4.0 之前的 CookieContainer 有bug,你可以直接通过 HttpResponse.Headers["Set-Cookie"] 取cookie字符串而不是通过 CookieContainer 来操作。
theks 2012-01-13
  • 打赏
  • 举报
回复
感谢#1楼哥们回复。

对啊,我就是想问,有没办法执行这响应的html,而不是分析出URL一个个去请求。。。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧