当前位置:编程学习 > C#/ASP.NET >>

关于用HttpWebRequest来访问需要登录页面的问题

最近用C# 写一个直接从网站上抓取信息的程序,而网站本身需要登录. http://s5.travian.cn/login.php

先用HttpWebRequest把用户名和密码POST到login.php,然后用HttpWebResponse获得登录后自动跳转页面 (dorf1.php) 的代码stream,这一步完全没有问题。

但紧接着如果用HttpWebRequest来请求页面dorf2.php,不知道为什么用HttpWebResponse返回的流却又变成了提示需要登录的页面了。

代码里已经声明过一个CookieContainer cc,而且两次的HttpWebRequest的时候也都已经把HttpWebRequest.CookieContainer = cc了,调试里也能看到第二次HttpWebRequest里的CookieContainer里的确有一条Cookie存在的。。

请教下各位老大。。这个是什么原因呢。。。

顺便问下...HttpWebRequest的CookieContainer里怎么才能看到Cookie的具体内容。。从调试的WATCH里面我只能看到里面有一条Cookie,其相关的域名是 s5.travian.cn,但怎么也看不到具体的Cookie内容,而第一次的HttpWebResponse倒是在它的Cookies下面能看到一串 cookie的具体值。

谢谢。。谢谢了。。 --------------------编程问答-------------------- 需要把HttpWebResponse返回的Cookies放到cc中
  
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html --------------------编程问答-------------------- 你的Cookie没有带上,返回的Html请求如果有Set-Cookie的话,要Set到CookieContainer中。 --------------------编程问答-------------------- 谢谢两位..

嗯..HttpWebResponse的确返回了带有Set-Cookie... 只是HttpWebResponse.cookies返回的是一个Cookie Collection。。 不知道怎么Set到CookieContainer中

谢谢了 --------------------编程问答-------------------- 试试看使用HttpWebRequest.CookieContainer.Add(HttpWebResponse.Cookies)

HttpWebRequest req = ......
HttpWebResponse resp = .....
.....
req.CookieContainer.Add(resp.Cookies); --------------------编程问答-------------------- CookieContainer变量.SetCookies(uri,respone.Headers["Set-Cookie"]); --------------------编程问答-------------------- 谢谢楼上两位...

我发现使用过一次WebResponse后,好像无论是cc里还是WebRequest.CookieCollection里面都会自动出现Cookie的记录..

我也试了手动把WebResponse.cookie加到WebRequest.CookieCollection了..可是还是不行..

...有没有朋友愿意帮我看一下源码...我把登录相关的代码已经整理出来放到一个单独的工程里了....谢谢
--------------------编程问答-------------------- 此类问题我研究好几天了,你的问题可能是:
1.返回的其实是很多cookie,但只是取到第一个而已.你可以先通过ie正常访问,并抓包查看来验证是否是这个问题.
2.你有没有将验证后得到的cookie提交到最后的页面,若没有的话,也会出现你那样的问题. --------------------编程问答-------------------- 这样改

foreach (Cookie c in MyResponse.Cookies)
            {
                c.Path = "";
            }
            cc.Add(MyResponse.Cookies); --------------------编程问答-------------------- 多谢feiyun0112,这样改就好了。。谢谢 --------------------编程问答-------------------- 貌似有用,收了
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,