设置和取消WebBrowser控件代理服务器

      利用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

转载于:https://www.cnblogs.com/C-Shark/articles/1978469.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值