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 会少一个?
我处理的笨办法就是用CookieContainer的GetCookies方法获得一个CookieCollection
然后把这个CookieCollection里的所有Cookie强行设置属性Domain为要发送的域名
印象中是tieba.baidu.com和.baidu.com被.NET认为是2个域名了
tieba.baidu.com好像是被识别成了.tieba.baidu.com,也就是tieba.baidu被当成了一个字符串
Set-Cookie: TIEBAUID=cb23caae14130a0d384a57f1; expires=Thu, 31-Dec-2020 15:59:59 GMT; path=/; domain=tieba.baidu.com
这个段被认为是属于.tieba.baidu.com这个域名了,很明显".baidu.com"!=".tieba.baidu.com",所以这段头数据就被pass了