完美解决C#Webbrowser控件设置Cookie问题
2016-09-22 10:18
369 查看
完美解决C#Webbrowser控件设置Cookie问题
由于个人项目需求,需要把从抓包里面的Cookie数据写入到webbrowser空控件里,经过百度白百般折腾,结果还是失败,搜索到的答案基本上都是[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData); InternetSetCookie(url, "cookieName", "cookieValue"); // navigate webBrowser.Navigate(url);
方法本身没错,只是讲的不够详细,而且我是需要设置好几个Cookie键值对。需要用到循环遍历。首先贴下我的详细代码:
[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已经完美设置成功。
还有就是百度不能解决问题的时候,我们要多多Google。
还有就是可能你手动设置Cookie的过程中由于传参错误或其他原因导致webbrowser打开url提示错误500之类的,这时候需要手动打开电脑的IE浏览器,然后清除缓存记录Cookie等。就可以正常打开url了。
相关文章推荐
- 完美解决C#Webbrowser控件设置Cookie问题
- 抓出设置C#的WebBrowser控件Cookie失败的元凶
- 自定义ComboBox控件,完美解决C#自带的ComboBox效率慢的问题
- c# 控件文本通用代理委托设置,解决不同线程间设置控件问题
- C# ComboBox控件“设置 DataSource 属性后无法修改项集合”的完美解决方法
- 如何在C# WinForm 程序中使用WebBrowser控件时设置COOKIE的值。
- php、asp.net关于后台设置的cookie前台JS获取时出现中文乱码问题解决
- VS2005中,C#中跨线程访问控件问题解决方案
- WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 推荐
- 解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题
- 转:C#中跨线程访问控件问题解决方案
- 完美的解决跨站脚本的COOKIE弹框框的问题
- TextBox设置OnTextChanged后验证控件失效问题的解决
- C#中继承窗体会导致控件消失的问题解决
- C#中跨线程访问控件问题解决方案
- 完美解决WIN7系统字体模糊问题(替换字体+更改样式设置+修改注册表)
- C#中跨线程访问控件问题解决方案
- C#中跨线程访问控件问题解决方案
- C#中引用第三方ocx控件引发的问题以及解决办法
- [C#]解决statusStrip控件上的项目不能靠右对齐的问题