[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData); private void test(){ string cookie = "name=小明; age=19;phone=13013139876"//须要设置到Webbrowser的Cookie信息 string url = "http://192.168.1.12/data/2016/student.htm";//访问地址 string domain = "/data/2016";//目标主机域名 foreach (string c in cookie.Split(';')) { string[] item = c.Split('='); if (item.Length == 2) { InternetSetCookie(url, null, new Cookie(HttpUtility.UrlEncode(item[0]).Replace("+", ""), HttpUtility.UrlEncode(item[1]), "; expires = Session GMT", "/").ToString()); } } webBrowser1.Navigate(url); }
要注意上面的代码.Replace(“+”, “”),我被这个困惑了半天,致使Cookie只有第一个字段name设置成功,后面的age,phone字段都没设置成功,经过抓包分析,发现设置后的Cookie字段前面多了个”+”号,都说细节决定成败,确实如此。这个”+”号应该是HttpUtility.UrlEncode()编码后致使的,可是若是你不进行HttpUtility.UrlEncode()编码是绝对不行的,因此咱们只好经过.Replace(“+”, “”)过滤掉”+”号,至此Cookie已经完美设置成功。
还有就是可能你手动设置Cookie的过程当中因为传参错误或其余缘由致使webbrowser打开url提示错误500之类的,这时候须要手动打开电脑的IE浏览器,而后清除缓存记录Cookie等。就能够正常打开url了。
web
原文连接:https://blog.csdn.net/hangom/article/details/52619394