隐藏

c#webbrowser设置代理ip

发布:2024/1/21 14:26:50作者:管理员 来源:本站 浏览次数:387

使用api设置代理ip访问网站。


       #region 设置代理ip

           //strProxy为代理IP:端口

           private void RefreshIESettings(string strProxy)

           {

               const int INTERNET_OPTION_PROXY = 38;

               const int INTERNET_OPEN_TYPE_PROXY = 3;

               const int INTERNET_OPEN_TYPE_DIRECT = 1;

   

               IEProxy.Struct_INTERNET_PROXY_INFO struct_IPI;

               // Filling in structure

               struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;

               struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy);

               struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");

   

               // Allocating memory

               IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI));

               if (string.IsNullOrEmpty(strProxy) || strProxy.Trim().Length == 0)

               {

                   strProxy = string.Empty;

                   struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_DIRECT;

   

               }

               // Converting structure to IntPtr

               Marshal.StructureToPtr(struct_IPI, intptrStruct, true);

   

               bool iReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(struct_IPI));

           }

   

           [DllImport("wininet.dll", SetLastError = true)]

           private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);

           public class IEProxy

           {

               private const int INTERNET_OPTION_PROXY = 38;

               private const int INTERNET_OPEN_TYPE_PROXY = 3;

               private const int INTERNET_OPEN_TYPE_DIRECT = 1;

   

               private string ProxyStr;

   

   

               [DllImport("wininet.dll", SetLastError = true)]

   

               private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);

   

               public struct Struct_INTERNET_PROXY_INFO

               {

                   public int dwAccessType;

                   public IntPtr proxy;

                   public IntPtr proxyBypass;

               }

   

               private bool InternetSetOption(string strProxy)

               {

                   int bufferLength;

                   IntPtr intptrStruct;

                   Struct_INTERNET_PROXY_INFO struct_IPI;

   

                   if (string.IsNullOrEmpty(strProxy) || strProxy.Trim().Length == 0)

                   {

                       strProxy = string.Empty;

                       struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_DIRECT;

                   }

                   else

                   {

                       struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;

                   }

                   struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy);

                   struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");

                   bufferLength = Marshal.SizeOf(struct_IPI);

                   intptrStruct = Marshal.AllocCoTaskMem(bufferLength);

                   Marshal.StructureToPtr(struct_IPI, intptrStruct, true);

                   return InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, bufferLength);

   

               }

               public IEProxy(string strProxy)

               {

                   this.ProxyStr = strProxy;

               }

               //设置代理

               public bool RefreshIESettings()

               {

                   return InternetSetOption(this.ProxyStr);

               }

               //取消代理

               public bool DisableIEProxy()

               {

                   return InternetSetOption(string.Empty);

               }

           }

           #endregion

           

                  //清空session

           public void ResetSession()

           {

               //Session的选项ID为42

               InternetSetOption(IntPtr.Zero, 42, IntPtr.Zero, 0);

           }

           

                   //清空cookie

           public void ResetCookie()

           {

               if (webBrowser1.Document != null)

               {

                   webBrowser1.Document.Cookie.Remove(0, webBrowser1.Document.Cookie.Count() - 1);

   

               }

               string[] theCookies = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Cookies));

               foreach (string currentFile in theCookies)

               {

                   try

                   {

                       System.IO.File.Delete(currentFile);

                   }

                   catch (Exception ex)

                   {

                   }

               }

           }