谁能详细的说一下httpWebRequest与COOKIE?

BATTLERxANGE 2009-12-08 07:15:12
我现在的做法是:

public static CookieContainer co = new CookieContainer();
httpWebRequest.CookieContainer = co;

获取验证码,登入,然后开始浏览各种资源,都是这样做。一直来没什么问题,但现在要访问一个页面,却无论如何都无法得到COOKIE然后在POST。也弄不清楚CookieContainer属性、CookieCollection类和webResponse.Cookies属性。因为不懂这些之间的关系和原理,结果怎么弄也无法实现,现在没办法了,想先弄清楚原理,但是网上似乎都找不到很好的解释……
使用我上面提到的方法可以访问一些页面,但现在访问的一个页面却不行,GET后截封后也没发现包里面有COOKIE,返回的页面信息也没有我登入后的资料,但访问例如INDEX啊之类的却有COOKIE也能得到我的信息,啊~真是郁闷死了!!
...全文
1141 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
feelsyt 2010-07-13
  • 打赏
  • 举报
回复
不能跨域
BATTLERxANGE 2009-12-09
  • 打赏
  • 举报
回复
或者请求完成后,遍历一下HttpWebResponse中的cookie

if (WebResponse.Cookies.Count > 0)
{
foreach (Cookie x in WebResponse.Cookies)
{
c += x.Name + "=" + x.Value + "\r\n";
}
MessageBox.Show("cookie如下:\r\n" + c, "成功");
}

结果是根本没有进入这段代码- =!也就是COUNT=0
BATTLERxANGE 2009-12-09
  • 打赏
  • 举报
回复
co.MaxCookieSize = 1000;
co.PerDomainCapacity = 10;
这样设置了还是不行呢...
用IE去访问却可以得到完整的COOKIE,但是用HttpWebRequest.GetResponse();却总是只得到一半的COOKIE,郁闷死了
sundotLei 2009-12-09
  • 打赏
  • 举报
回复
或者请求完成后,遍历一下HttpWebResponse中的cookie

if (WebResponse.Cookies.Count > 0)
{
foreach (Cookie x in WebResponse.Cookies)
{
c += x.Name + "=" + x.Value + "\r\n";
}
MessageBox.Show("cookie如下:\r\n" + c, "成功");
}
sundotLei 2009-12-09
  • 打赏
  • 举报
回复
丢失一小段? 是不是cookie数量太多了.
设置一下CookieContainer这两个属性试试

MaxCookieSize
PerDomainCapacity
zcl24 2009-12-09
  • 打赏
  • 举报
回复
CookieContainer是请求的cookie
webResponse.Cookies是响应cookie
BATTLERxANGE 2009-12-09
  • 打赏
  • 举报
回复
还是没有人回答...
悔说话的哑巴 2009-12-09
  • 打赏
  • 举报
回复
再次帮顶
BATTLERxANGE 2009-12-09
  • 打赏
  • 举报
回复
顶上
BATTLERxANGE 2009-12-09
  • 打赏
  • 举报
回复
我现在通过GET可以访问需要登入才能访问的页面,没有问题,但是我还需要POST数据,这时候使用之前GET访问得到的COOKIE,但是却少了一部分。
用IE去访问截包后发现COOKIE完整……
COOKIE也没有那里清理掉了啊。。。唉,真郁闷
jacky_zyong 2009-12-09
  • 打赏
  • 举报
回复
你看看你程序是不是某个地方把COOKie 清理掉了。还是你的cookie过期了
应该不会出现这样的问题
woshifou 2009-12-08
  • 打赏
  • 举报
回复
学习。
BATTLERxANGE 2009-12-08
  • 打赏
  • 举报
回复
是WINFORM,发现在发出请求的时候,COOIKE丢失了一段是怎么回事呢?用IE访问截包后发现没问题,但是我用以下的代码进行访问的时候,获取到的COOKIE却丢失了一小段?
HttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.XXX.cn/XXXXX");
HttpWebRequest.Accept = "*/*";
//HttpWebRequest.Referer = "http://XXXX/";
HttpWebRequest.CookieContainer = http.co;//这个是COOKIE
HttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
HttpWebRequest.Method = "GET";
HttpWebRequest.Headers["Accept-Encoding"] = " gzip, deflate";
HttpWebRequest.Headers["Cache-Control"] = " no-cache";
HttpWebRequest.Headers["Accept-Language"] = " zh-CN";
HttpWebRequest.Headers["x-flash-version"] = " 9,0,124,0";
//HttpWebRequest.Connection = " Keep-Alive";
WebResponse = (HttpWebResponse)HttpWebRequest.GetResponse();
getStream = WebResponse.GetResponseStream();
streamReader = new StreamReader(getStream, Encoding.Default);
getString = streamReader.ReadToEnd();
streamReader.Close();
getStream.Close();
Console.WriteLine(getString);
sundotLei 2009-12-08
  • 打赏
  • 举报
回复
没听太明白,估计是cookie容器没保留的原因,

确定你每次请求的时候是不是都new了一个新的CookieContainer对象,如果是,那之前页面(或上一个页面)获取的cookie会全部丢失。
如果是WEB项目,最简单的就是将CookieContainer保存在session中
private CookieContainer co;
if(Session["c"]!=null){
co=(CookieContainer)Session["c"];
}
else{
co= = new CookieContainer();

}

请求完成后,将 Session["c"]=co; 后期可以周期性的清空Session

如果不是,请详细点说明你的问题。
jsoner 2009-12-08
  • 打赏
  • 举报
回复
懒得解答...顶贴混可用分.嘿嘿
BATTLERxANGE 2009-12-08
  • 打赏
  • 举报
回复
webBrowser有点了解,我想知道的是httpWebRequest与COOKIE,并且保持COOKIE,以便访问那些需要登入的页面
healer_kx 2009-12-08
  • 打赏
  • 举报
回复
用CookieContainer属性就行了啊。
wuyq11 2009-12-08
  • 打赏
  • 举报
回复
CookieContainer myCookieContainer = new CookieContainer();
string cookieStr = webBrowser1.Document.Cookie;
string[] cookstr = cookieStr.Split( '; ');
foreach (string str in cookstr)
{

}
HttpWebRequest hreq=(HttpWebRequest)HttpWebRequest.Create("");
hreq.Method= "POST ";
hreq.ContentType= "application/x-www-form-urlencoded ";
hreq.CookieContainer= myCookieContainer;
http://topic.csdn.net/u/20080608/10/63a38600-ff8c-4f6b-b87d-590442a90c07.html
silentwins 2009-12-08
  • 打赏
  • 举报
回复
沉了,关注!

110,577

社区成员

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

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

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