none
請問HttpWebRequest用Get時,如何將保留的CookieContainer送出去? RRS feed

  • 問題

  • 各位前輩好,這問題感覺很笨,

    但是網路上所找的解答卻不能解決問題,

    所以在這裡發問。

    程式碼如下:

    其中In_Uri, In_Referer, In_CookieContainer是傳進來的值。

    HttpWebRequest MyRequest = null; HttpWebResponse MyResponse = null; MyRequest = (HttpWebRequest)WebRequest.Create(In_Uri); MyRequest.Referer = In_Referer; MyRequest.CookieContainer = In_CookieContainer; MyRequest.Method = WebRequestMethods.Http.Get; MyRequest.KeepAlive = false; MyRequest.Timeout = TimeOut;

    MyRequest.Accept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
    MyRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";
    MyRequest.ContentType = "application/x-www-form-urlencoded";

    MyResponse = (HttpWebResponse)MyRequest.GetResponse();


    In_CookieContainer是我所保留的Cookie,裡面有值。

    但是我用監控軟體(HTTP Analyzer)看的時候,

    Request Header卻沒有Cookie,我明明有設定 MyRequest.CookieContainer = In_CookieContainer; ,

    但是其他我所設定的都有,Referer, Accept等都有。

    請問各位前輩,

    如果我要將保留的Cookie用Get送出去,

    是哪邊要修正?

    2014年1月14日 上午 08:36

解答

  • 我剛剛拿你的程式碼試了一下,在 Cookie 使用相同網域是可以送的,如果

    MyRequest = (HttpWebRequest)WebRequest.Create("http://www.google.com");
    // MyRequest.Referer = In_Referer;
    MyRequest.CookieContainer = new CookieContainer();
    
    MyRequest.CookieContainer.Add(new Uri("http://www.google.com"), new Cookie("A", "B"));
    MyRequest.Method = WebRequestMethods.Http.Get;
    MyRequest.KeepAlive = false;
    MyRequest.Timeout = 30000; 
    MyRequest.Accept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
    MyRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";
    MyRequest.ContentType = "application/x-www-form-urlencoded";

    再使用 HTTP Analyzer 觀察,cookie 是有收到的。

    所以我在想是不是再你要送出之前,將 CookieCollection 的 Domain 修改一下,這樣做試看看。

    • 已標示為解答 笨嘎嘎 2014年1月14日 上午 10:13
    2014年1月14日 上午 10:05

所有回覆

  • 想請問一下 In_Uri 與 In_CookieContainer 內 Cookies 的網域 (Domain) 是相同的嗎?
    2014年1月14日 上午 09:27
  • 不一樣,

    我看了一下兩者的網域是不一樣,

    In_Uri:http://AAA.BBB.CCC.104

    Cookies的網域:http://AAA.BBB.CCC.200

    2014年1月14日 上午 09:35
  • 我剛剛拿你的程式碼試了一下,在 Cookie 使用相同網域是可以送的,如果

    MyRequest = (HttpWebRequest)WebRequest.Create("http://www.google.com");
    // MyRequest.Referer = In_Referer;
    MyRequest.CookieContainer = new CookieContainer();
    
    MyRequest.CookieContainer.Add(new Uri("http://www.google.com"), new Cookie("A", "B"));
    MyRequest.Method = WebRequestMethods.Http.Get;
    MyRequest.KeepAlive = false;
    MyRequest.Timeout = 30000; 
    MyRequest.Accept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
    MyRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";
    MyRequest.ContentType = "application/x-www-form-urlencoded";

    再使用 HTTP Analyzer 觀察,cookie 是有收到的。

    所以我在想是不是再你要送出之前,將 CookieCollection 的 Domain 修改一下,這樣做試看看。

    • 已標示為解答 笨嘎嘎 2014年1月14日 上午 10:13
    2014年1月14日 上午 10:05
  • 感謝前輩回答,原因是Domain,

    將Cookie的Domain更換後就可以了。

    因為之前都是在同一個網域所以沒問題,

    但是換到不同網域後,Cookie的網域也要換,從A的網域換到B的網域,

    謝謝前輩的回答^^。

    2014年1月14日 上午 10:13