C# 设置代理
1.检查代理是否可用:
/// <summary>
/// 验证代理IP地址是否可用
/// </summary>
/// <param name="callback">是否可用</param>
/// <param name="ip">地址</param>
/// <param name="port">端口</param>
public void ChecKedForIP(Action<bool> callback,string ip,int port,int timeout=0)
{
try
{
string Reshtml = string.Empty;//请求返回的结果
WebProxy webproxy = new WebProxy(ip, port); //实例代理设置
HttpWebRequest Httpweq = (HttpWebRequest)WebRequest.Create("http://www.baidu.com");
Httpweq.Proxy = webproxy;//模拟设置代理请求
HttpWebResponse HttpRespon = (HttpWebResponse)Httpweq.GetResponse();
Httpweq.Timeout = timeout != 0 ? timeout : 10000; //默认10秒,如果设置值,就用设置的值
Encoding encoding = Encoding.GetEncoding("gb2312");//设置编码格式为汉字,防止英文系统,无法解码
using (StreamReader reader = new StreamReader(HttpRespon.GetResponseStream(), encoding))
{
Reshtml = reader.ReadToEnd().Trim();
if (!string.IsNullOrEmpty(Reshtml))
{
callback(true);
}
else
{
callback(false);
}
}
}
catch (Exception)
{
callback(false);
}
finally { }
}
2.设置好恢复代理设置
[DllImport(@"wininet",SetLastError = true,CharSet = CharSet.Auto,EntryPoint = "InternetSetOption",CallingConvention = CallingConvention.StdCall)]
public static extern bool InternetSetOption
(
int hInternet,
int dmOption,
IntPtr lpBuffer,
int dwBufferLength
);
/// <summary>
/// 设置代理
/// </summary>
/// <param name="ip_port">IP地址和端口</param>
public void SetProxy(string ip_port)
{
//打开注册表
RegistryKey regKey = Registry.CurrentUser;
string SubKeyPath = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings";
RegistryKey optionKey = regKey.OpenSubKey(SubKeyPath, true);
//更改健值,设置代理,
optionKey.SetValue("ProxyEnable", 1);
if (ip_port.Length == 0)
{
optionKey.SetValue("ProxyEnable", 0);
}
optionKey.SetValue("ProxyServer", ip_port);
//激活代理设置
InternetSetOption(0, 39, IntPtr.Zero, 0);
InternetSetOption(0, 37, IntPtr.Zero, 0);
}
/// <summary>
/// 不使用代理设置
/// </summary>
public void UnSetProxy()
{
RegistryKey regKey = Registry.CurrentUser;
string SubKeyPath = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings";
RegistryKey optionKey = regKey.OpenSubKey(SubKeyPath, true);
//更改健值,设置代理,
optionKey.SetValue("ProxyEnable", 0);
//激活代理设置
InternetSetOption(0, 39, IntPtr.Zero, 0);
InternetSetOption(0, 37, IntPtr.Zero, 0);
}

浙公网安备 33010602011771号