关于 CookieContainer

验证码识别 2011-01-13 10:27:59
我用 HttpWebRequest 模拟访问http://tieba.baidu.com/f?kw=%E1%F7%C4%A7%CA%D6%BC%C7
并设置了CookieContainer

返回的 HttpWebResponse 头有如下信息

Set-Cookie: TIEBAUID=e136d3a979f79e7ae1d43525; expires=Thu, 31-Dec-2020 15:59:59 GMT; path=/; domain=tieba.baidu.com

再次用 HttpWebRequest 模拟访问
http://tieba.baidu.com/f?ct=486539264&cm=59200&lm=576238&rs1=0&rs10=1&word=&tn=jsonVcode&t=0.37204482982496
并设置为同一个 CookieContainer

截取HTTP 消息发现 Cookie 不带 TIEBAUID, 丢失了
(我认为消息头应该有 Cookie: TIEBAUID=e136d3a979f79e7ae1d43525;...)


是BUG还是什么, 谁帮我分析下
...全文
151 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
验证码识别 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 whowhen21 的回复:]
不会是丢失,有的服务器验证比较严格,提交的来路不明的话,有些信息是不会给你返回的!
再说,你有没有试试,不带这个Cookie能正常访问么
*************************************************
本内容使用 CSDN小秘书 回复
看帖回帖,发帖也要结贴哦 !
********************************************……
[/Quote]


m_cookieContainer = new CookieContainer();

string tieba = "http://tieba.baidu.com/f?kw=%E1%F7%C4%A7%CA%D6%BC%C7";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(tieba);
request.Method = "GET";
request.Accept = "*/*";
request.Referer = "http://tieba.baidu.com/f?kw=%E1%F7%C4%A7%CA%D6%BC%C7";

request.CookieContainer = m_cookieContainer;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

string strResponseHeader = response.Headers.Get("Set-Cookie");

string strCookies1 = "";
foreach (Cookie cookie in response.Cookies)
{
strCookies1 += cookie.ToString() + " |||| ";
}

CookieCollection cookies = m_cookieContainer.GetCookies(request.RequestUri);

string strCookies2 = "";
foreach (Cookie cookie in cookies)
{
strCookies2 += cookie.ToString() + " |||| ";
}


我执行以上代码

------strResponseHeader 值----------
TIEBAUID=cb23caae14130a0d384a57f1; expires=Thu, 31-Dec-2020 15:59:59 GMT; path=/; domain=tieba.baidu.com,BAIDUID=08053D35772201CB1149E8AF396D5AC0:FG=1; expires=Sat, 14-Jan-12 08:09:07 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1


------strCookies1 值------
TIEBAUID=cb23caae14130a0d384a57f1 |||| $Version=1; BAIDUID=08053D35772201CB1149E8AF396D5AC0:FG=1; $Path=/; $Domain=.baidu.com ||||

------strCookies2 值------
$Version=1; BAIDUID=08053D35772201CB1149E8AF396D5AC0:FG=1; $Path=/; $Domain=.baidu.com ||||


抓包消息:
----------------------
HTTP/1.1 200 OK
Date: Fri, 14 Jan 2011 08:17:51 GMT
Server: Apache
Set-Cookie: TIEBAUID=cb23caae14130a0d384a57f1; expires=Thu, 31-Dec-2020 15:59:59 GMT; path=/; domain=tieba.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Set-Cookie: BAIDUID=43DCC82AB325765238BE2BB6C5137BCB:FG=1; expires=Sat, 14-Jan-12 08:17:51 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1
Vary: Accept-Encoding,User-Agent
Connection: Keep-Alive
Content-Type: text/html; charset=GBK
Content-Length: 62063
-------------------------------



为什么 strCookies2 会少一个?


whowhen21 2011-01-14
  • 打赏
  • 举报
回复
不会是丢失,有的服务器验证比较严格,提交的来路不明的话,有些信息是不会给你返回的!
再说,你有没有试试,不带这个Cookie能正常访问么
*************************************************
本内容使用 CSDN小秘书 回复
看帖回帖,发帖也要结贴哦 !
*************************************************

110,570

社区成员

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

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

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