none
向webBrowser写入cookie的问题 RRS feed

  • 问题

  • 先在向webBrowser登录打开http://tieba.baidu.com/f?kw=%CE%F7%B1%B1&frs=yqtb

    然后通过wb.Document.Cookie获取到cookie字符串

    然后退出登录

    然后写入cookie

    [DllImport("wininet.dll", CharSet = CharSet.Ansi)] public static extern bool InternetSetCookie(string url, string name, string data); public static void SetCookie(string url, string data) { string[] cookies = data.Split(';'); foreach (string cookie in cookies) { string[] fieldvalue = cookie.Split('='); InternetSetCookie(url, fieldvalue[0], fieldvalue[1] + ";expires=Sun,22-Feb-2099 00:00:00 GMT"); } } SetCookie

    SetCookie("baidu.com", "...");

    然后在webBrowser中打开http://tieba.baidu.com/f?kw=%CE%F7%B1%B1&frs=yqtb

     为非登录状态...  请问哪出错 了,怎么样才能得到想要的效果



    • 已编辑 12vd7 2012年7月9日 1:43
    2012年7月8日 15:03

答案

全部回复

  • 没人知道吗

    2012年7月9日 3:26
  • 能问一下,你为什么要先退出登录再写入Cookie?
    2012年7月9日 21:32
  • 能问一下,你为什么要先退出登录再写入Cookie?

    协议通信获取cookie然后给webbrower用.

     有些操作协议做不了

    2012年7月10日 0:32
  • Hi 12vd7,

      你获取Cookie和设置Cookie都执行正确而且数据都成功保存在想要的变量了吗!你尝试下下面这个声明,然后看看InternetSetCookie 调用的返回数值是否为零!

     
    [DllImport("wininet.dll", CharSet=CharSet.Auto , SetLastError=true)]  
    private static extern bool InternetSetCookie (string url, string name, string data); 
    

      希望你的问题能够及早解决。

    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2012年7月10日 4:55
    版主
  • Hi 12vd7,

      你获取Cookie和设置Cookie都执行正确而且数据都成功保存在想要的变量了吗!你尝试下下面这个声明,然后看看InternetSetCookie 调用的返回数值是否为零!

     
    [DllImport("wininet.dll", CharSet=CharSet.Auto , SetLastError=true)]  
    private static extern bool InternetSetCookie (string url, string name, string data); 

      希望你的问题能够及早解决。

    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    返回false
    2012年7月10日 8:32
  • Hi 12vd7,

      你获取Cookie和设置Cookie都执行正确而且数据都成功保存在想要的变量了吗!你尝试下下面这个声明,然后看看InternetSetCookie 调用的返回数值是否为零!

     
    [DllImport("wininet.dll", CharSet=CharSet.Auto , SetLastError=true)]  
    private static extern bool InternetSetCookie (string url, string name, string data); 

      希望你的问题能够及早解决。

    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    返回false
    既然返回false,那么,GetLastError()的值是什么?
    2012年7月10日 21:16
  • Hi 12vd7,

      你获取Cookie和设置Cookie都执行正确而且数据都成功保存在想要的变量了吗!你尝试下下面这个声明,然后看看InternetSetCookie 调用的返回数值是否为零!

     
    [DllImport("wininet.dll", CharSet=CharSet.Auto , SetLastError=true)]  
    private static extern bool InternetSetCookie (string url, string name, string data); 

      希望你的问题能够及早解决。

    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    返回false
    既然返回false,那么,GetLastError()的值是什么?
    GetLastError()如何获取?
    2012年7月11日 1:26
  • Hi 12vd7,

      你获取Cookie和设置Cookie都执行正确而且数据都成功保存在想要的变量了吗!你尝试下下面这个声明,然后看看InternetSetCookie 调用的返回数值是否为零!

     
    [DllImport("wininet.dll", CharSet=CharSet.Auto , SetLastError=true)]  
    private static extern bool InternetSetCookie (string url, string name, string data); 

      希望你的问题能够及早解决。

    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    返回false
    既然返回false,那么,GetLastError()的值是什么?


            [DllImport("kernel32.dll")]
            private static extern int GetLastError();

    (0)-操作成功完成。

    2012年7月11日 1:47
  • 顶下挖啊拉
    2012年7月11日 8:15
  • 顶下挖啊拉
    2012年7月11日 10:49
  • 顶下挖啊拉
    2012年7月11日 15:06
  • 你能贴出你的代码么?我觉得可能需要debug一下才好知道答案。
    2012年7月11日 21:38
  • 你能贴出你的代码么?我觉得可能需要debug一下才好知道答案。


     [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern bool InternetSetCookie(string url, string name, string data); 
            
            [DllImport("kernel32.dll")]
            private static extern int GetLastError(); 
            public  void SetCookie(string url, string data)
            {
                //int index = 0;
                //while ((index = data.IndexOf(",", index)) > 0)
                //{
                //    index++;
                //    if (data[index] != ' ') { data = data.Insert(index, ","); index++; }
                //}
                //string[] cs = data.Split(new string[] { ",," }, StringSplitOptions.RemoveEmptyEntries);
                //foreach (string c in cs)
                //{
                //    int i = c.IndexOf("=");
                //    InternetSetCookie(url, c.Substring(0, i), c.Substring(i + 1) + ";expires=Thu, 01-Jan-2020 00:00:01 GMT");
                //}
                string[] cookies = data.Split(';');
                foreach (string cookie in cookies)
                {
                    string[] fieldvalue = cookie.Split('=');
                    bool b= InternetSetCookie(url, fieldvalue[0], fieldvalue[1] + ";expires=Sun,22-Feb-2099 00:00:00 GMT");
                    tb.Text += "--" + b.ToString() + "|" + fieldvalue[0] + "|" + fieldvalue[1] + "|" + GetLastError();
                }
            }

     SetCookie("passport.baidu.com", "BAIDUID=872F83485E3D971D3E4CCF6AD41B03FE:");

    就这样

    2012年7月12日 1:12
  • 我试的结果是GetLastError() == 12006。(BAIDUID更换成我收到的ID了),可能别的地方不同吧。

    ---------------------------

    ---------------------------
    --False|BAIDUID|8BCDDB86455A8865D902274C979FDBF5:|12006
    ---------------------------
    OK  
    ---------------------------

    我收到的Cookie如下:

    TIEBAUID=c061bb2c941c3fea75c43dad; TIEBA_USERTYPE=7b00a4229d6d32581a92708d; TIEBA_LOGINED_USER=_%2525E6%252596%2525B0%2525E7%252594%25259F%2525E4%2525BB%2525A3; NO_UNAME=1; BAIDUID=8BCDDB86455A8865D902274C979FDBF5:FG=1

    你比较一下,看看有区别么?

    2012年7月12日 2:04
  • 我试的结果是GetLastError() == 12006。(BAIDUID更换成我收到的ID了),可能别的地方不同吧。

    ---------------------------

    ---------------------------
    --False|BAIDUID|8BCDDB86455A8865D902274C979FDBF5:|12006
    ---------------------------
    OK  
    ---------------------------

    我收到的Cookie如下:

    TIEBAUID=c061bb2c941c3fea75c43dad; TIEBA_USERTYPE=7b00a4229d6d32581a92708d; TIEBA_LOGINED_USER=_%2525E6%252596%2525B0%2525E7%252594%25259F%2525E4%2525BB%2525A3; NO_UNAME=1; BAIDUID=8BCDDB86455A8865D902274C979FDBF5:FG=1

    你比较一下,看看有区别么?

    12006

    12006是什么错误,网上查不到.你测试能显示登录状态吗

    2012年7月12日 3:32
  • 请问用这样OK吗?

    SetCookie("http://passport.baidu.com", "BAIDUID=872F83485E3D971D3E4CCF6AD41B03FE:");

    http://www.cnblogs.com/huqingyu/archive/2008/11/27/1342256.html

    不過,它會轉址到 https://passport.baidu.com/?login


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2012年7月12日 3:42
  • 请问用这样OK吗?

    SetCookie("http:passport.baidu.com", "BAIDUID=872F83485E3D971D3E4CCF6AD41B03FE:");

    http://www.cnblogs.com/huqingyu/archive/2008/11/27/1342256.html


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    效果一样

    2012年7月12日 4:32
  • 发现他会转址到 https://passport.baidu.com/?login

    刚才试了一下,return是true!

    SetCookie("https://passport.baidu.com/?login", "BAIDUID=872F83485E3D971D3E4CCF6AD41B03FE:");


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2012年7月12日 5:09
  • 发现他会转址到 https://passport.baidu.com/?login

    刚才试了一下,return是true!

    SetCookie("https://passport.baidu.com/?login", "BAIDUID=872F83485E3D971D3E4CCF6AD41B03FE:");


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    哦,是true了,可登录状态还是未登录

    2012年7月12日 5:27
  • 您好,

    虽然有cookie,如果没有走登入程序的话,Server端应该什么认不得的吧!


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已标记为答案 12vd7 2012年7月13日 6:12
    2012年7月12日 6:16