完美解决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了。
---------------------

最新文章

  1. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
  2. C# out ref 重载
  3. jQuery选择器(二)
  4. LayaAir引擎——(一)
  5. [转] git 常用命令
  6. [转]何时使用委托而不使用接口(C# 编程指南)
  7. Android ContentProvider的实现
  8. css animation让图标不断旋转
  9. java Spring配置数据单元
  10. UVA 10798 - Be wary of Roses (bfs+hash)
  11. 趋势科技PC-cillin2015,你来公測我发奖!
  12. FileSystemWatcher类监控文件的更改状态并且实时备份文件
  13. [译] PEP 255--简单的生成器
  14. nginx 负载均衡(默认算法)
  15. [IR] Search Server - Sphinx
  16. pipenv+sublime text3 配置
  17. postMessage 消息传递
  18. WorldWind源码剖析系列:四叉树瓦片集合类QuadTileSet
  19. 第三次博客作业JSF
  20. Android 的一些提示框

热门文章

  1. Chino的数列
  2. BZOJ 3745
  3. Javascript \x 反斜杠x 16进制 编解码
  4. springboot 传List参数
  5. tomcat优化,java查看
  6. Java实现简单记事本
  7. hdu 4725 The Shortest Path in Nya Graph 【拆点】+【最短路】
  8. 使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版(二)——部署配置及相关知识
  9. springboot整合视图层之Thymeleaf
  10. shiro学习总结(一)----初识shiro