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 会少一个?

解决方案 »

  1.   

    经常这样,抓回来的cookie的domain因为和HttpWebRequest的URI的域名不一致,导致附加不上
    我处理的笨办法就是用CookieContainer的GetCookies方法获得一个CookieCollection
    然后把这个CookieCollection里的所有Cookie强行设置属性Domain为要发送的域名
      

  2.   

    好久以前做过,记得不大清楚了,你自己看下
    印象中是tieba.baidu.com和.baidu.com被.NET认为是2个域名了
    tieba.baidu.com好像是被识别成了.tieba.baidu.com,也就是tieba.baidu被当成了一个字符串
      

  3.   

    可能和cookie的HttpOnly设置有关,这样导致GetResponse和CookieContainer的GetCookies获取有差别,具体CookieContainer的GetCookies怎么实现的不清楚
      

  4.   

    比如你这个代码,request.RequestUri里的域名是.baidu.com,GetCookies也是根据这个去过滤的,但是因为不知道是不是BUG
    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了
      

  5.   

    感觉 CookieContainer 很诡异, 很多情况不可预知