array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 设置和取消WebBrowser控件代理服务器 - 爱码网
C-Shark

      利用WebBrowser控件来辅助开发一些智能小软件,应该很多开发人员都尝试过。前段时间给一用户做一个验号器小软件,却碰到会禁用ip的问题。不过这也很正常,一般的安全性还可以的站点都会有这个限制。为了解决这个问题,去查阅了一些前辈的经验,通过更换代理服务器地址和端口号可以避免ip被限制。

      后来我通过调用wininet.dll 的InternetSetOption方法来动态设定WebBrower控件的代理服务器,以便临时跟换代理服务器地址来欺骗WEB服务器对ip的验证。网上已经有很多人实现到了,但看了很多都只是设置代理服务器的方法,却很少有怎么取消代理的方法。因此在这里我重新组织了一下。把设置代理和取消代理的方法都归纳到一个类中和大家分享一下,不过在测试中也发现到了一些问题,通过InternetSetOption设置的代理只能欺骗某些网站,并不是非常的完美,初步分析这个可能与站点获取客户端ip的方式有关,具体什么原因没有深究,有知道的可以告诉下我,谢谢!)。

      这里取消代理设置其实也挺简单的,它也是利用的InternetSetOption方法来实现,只是传人的参数不同,代理服务器地址和端口号的字符串为空就可以了。具体可以看以下代码。

 

下面是整理的代码(已测试,拿过去就可以用):

1 #region Copyright & License
2  //
3  // Copyright 2011-2011 鲨鱼 MyHelperLib
4  // 此为共享代码,不涉及任何版权!
5 // QQ:56427709
6 // http://56427709.qzone.qq.com/
7 //
8 #endregion
9
10 namespace MyHelperLib.IE
11 {
12 using System;
13 using System.Runtime.InteropServices;
14
15 /// <summary>
16 /// 设置WebBrowser控件的代理服务
17 /// 设置后不会影响IE浏览器
18 /// MSDN:http://msdn.microsoft.com/en-us/library/aa385114%28v=vs.85%29.aspx
19 /// </summary>
20 public class IEProxy
21 {
22 private const int INTERNET_OPTION_PROXY = 38;
23 private const int INTERNET_OPEN_TYPE_PROXY = 3;
24 private const int INTERNET_OPEN_TYPE_DIRECT = 1;
25
26 private string ProxyStr;
27
28 [DllImport("wininet.dll", SetLastError = true)]
29 private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);
30
31 public struct Struct_INTERNET_PROXY_INFO
32 {
33 public int dwAccessType;
34 public IntPtr proxy;
35 public IntPtr proxyBypass;
36 }
37
38 /// <summary>
39 /// 设置WebBrowser控件代理服务
40 /// </summary>
41 /// <param name="strProxy"></param>
42 /// <returns></returns>
43 private bool InternetSetOption(string strProxy)
44 {
45 int bufferLength;
46 IntPtr intptrStruct;
47 Struct_INTERNET_PROXY_INFO struct_IPI;
48
49 if (string.IsNullOrEmpty(strProxy) || strProxy.Trim().Length == 0)
50 {
51 strProxy = string.Empty;
52 struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_DIRECT;
53 }
54 else
55 {
56 struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
57 }
58
59 struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy);
60 struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");
61
62 bufferLength = Marshal.SizeOf(struct_IPI);
63 intptrStruct = Marshal.AllocCoTaskMem(bufferLength);
64 Marshal.StructureToPtr(struct_IPI, intptrStruct, true);
65
66 return InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, bufferLength);
67 }
68
69 public IEProxy(string strProxy)
70 {
71 this.ProxyStr = strProxy;
72 }
73
74 /// <summary>
75 /// 设置IE代理服务
76 /// </summary>
77 /// <returns></returns>
78 public bool RefreshIESettings()
79 {
80 return InternetSetOption(this.ProxyStr);
81 }
82
83 /// <summary>
84 /// 取消IE代理服务
85 /// </summary>
86 /// <returns></returns>
87 public bool DisableIEProxy()
88 {
89 return InternetSetOption(string.Empty);
90 }
91 }
92 }

MSDN参考地址:http://msdn.microsoft.com/en-us/library/aa385114%28v=vs.85%29.aspx

分类:

技术点:

相关文章: