C#設定代理IP及刷網站訪問量demo
阿新 • • 發佈:2019-02-06
二話不說先上圖:
瀏覽網站用的是webBrowser,使用timer進行延遲訪問網址,獲取代理ip列表通過解析ip代理網址獲取和資料夾方式StreamReader ReadLine獲取。
增加了個小功能用委託能夠在listbox裡面看到當前訪問的ip(藍色條,可動)
設定代理ip是參考網上的資料,下面是設定代理ip程式碼:
public Boolean setip(string ip) { RefreshIESettings(ip); IEProxy ie = new IEProxy(ip); return ie.RefreshIESettings(); } public struct Struct_INTERNET_PROXY_INFO { public int dwAccessType; public IntPtr proxy; public IntPtr proxyBypass; }; 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; 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); } }