C#HTTP代理的实现之注册表实现
作者:网络转载 发布时间:[ 2013/8/1 14:08:21 ] 推荐标签:
HTTP代理的实现形式,可以通过修改注册表项,然后启动浏览器来实现,也可以通过SOCKET通信,构造HTTP头实现。下面是关于注册表实现的方式。
注册表实现,只需要修改几个关键的注册表项可以了。
第一项:启用代理的注册表项。
第二项:代理的IP和端口。
第三项:连接的方式。
第四项:让注册表项立即生效。严格来说,这一步并没有修改注册表项,而是调用API通知注册表项生效。
下面是相关代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using Microsoft.Win32;
namespace UtilSp.ClassLib
{
public class ProxySp
{
[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);
private const int INTERNET_OPTION_REFRESH = 37;
private const int INTERNET_OPTION_PROXY = 38;
private const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
private const int INTERNET_OPEN_TYPE_PROXY = 3;
private const int INTERNET_OPEN_TYPE_DIRECT = 1;
#region changeUserAgent Function
public static void changeUserAgent()
{
var appName = Process.GetCurrentProcess().MainModule.ModuleName;
RegeditSp.write(@"HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerMAINFeatureControlFEATURE_BROWSER_EMULATION", appName, 9999, RegistryValueKind.DWord);
}
#endregion
#region setProxyEnabled Function
/// <summary>
/// Set proxy.
/// </summary>
/// <param name="isProxyEnabled">true:is enabled.false:is not enabled.</param>
/// <param name="proxyIP">Proxy ip and port.Format:192.168.100.162:8080</param>
/// <returns></returns>
public static bool setProxy(bool isProxyEnabled, string proxyIP = "")
{
string regPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings";//Enabled proxy option.
bool isSetProxyEnabledOk =
RegeditSp.write(RegeditSp.REGEDIT_ROOT_SET.HKEY_CURRENT_USER,
regPath,
"ProxyEnable",
isProxyEnabled ? 1 : 0,
true);
bool isSetProxyIP = true;
if (!string.IsNullOrEmpty(proxyIP))
{
isSetProxyIP = RegeditSp.write(RegeditSp.REGEDIT_ROOT_SET.HKEY_CURRENT_USER,
regPath,
"ProxyServer",
proxyIP,
true);
}
bool isConnectionOK=setConnection(isProxyEnabled, proxyIP);
bool isNotifyOk = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);//Notify proxy in the regedit has changed.Lanuch proxy when connect next.
bool isReadOK = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);//Read proxy from regedit.
return isSetProxyEnabledOk && isSetProxyIP && isNotifyOk && isReadOK && isConnectionOK;
}
#endregion
#region setConnection Function
private static bool setConnection(bool isProxyEnabled, string proxyIP)
{
string regPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections";//Connection register option.
byte[] szBuf = new byte[80];
szBuf[0] = 0x3c;
szBuf[4] = 0x09;
szBuf[8] = (byte)(isProxyEnabled ? 0x03 : 0x01);
szBuf[12] = (byte)proxyIP.Length;
for (int i = 0; i < proxyIP.Length; i++)
{
szBuf[i + 16] =(byte)Convert.ToInt32(proxyIP[i]);
}
string local = "<local>";
for (int j = 0; j < 7; j++)
{
szBuf[20 + proxyIP.Length + j] = (byte)Convert.ToInt32(local[j]);
}
return RegeditSp.write(RegeditSp.REGEDIT_ROOT_SET.HKEY_CURRENT_USER,
regPath,
"宽带连接",
szBuf,
true);
}
#endregion
}
}
附上工程代码http://download.csdn.net/detail/xxdddail/5831359。工程中实现了自动用代理IP列表刷网页的功能。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11