【转】使用程序修改系统(IE)代理设置
文章都是发布在github再转到这边的,这边格式可能会乱掉.博客地址:benqy.com
这是本人在做的一个前端开发调试工具(HttpMock),功能是web服务器+http日记+http代理(类似fiddler),其中的代理功能,需要在web服务启动时,自动去设置各浏览器的代理设置.
我原先是通过写注册表的方式去实现,实现方法很简单,写一个注册表文件,启动的时候自动运行一下这个注册表文件就可以.
修改代理的注册表文件的内容,proxy.reg:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"MigrateProxy"=dword:00000001
"ProxyEnable"=dword:00000001
"ProxyServer"="http=127.0.0.1:17173"
类似的,取消代理的注册表文件,disproxy.reg:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"MigrateProxy"=dword:00000001
"ProxyEnable"=dword:00000000
"ProxyServer"=""
这个方式非常的简单,但是存在一个严重的问题,就是修改完注册表之后,如果不重启ie,代理设置不会马上生效(这样做出来的软件,实在太山寨,简直没法用啊,什么烂软件).
后来,发现fiddler是用wininet这个工具来设置ie代理.因此,google了一番之后,找到了wininet.dll这个东西,然后用.NET写了个简单的命令行工具.功能很简单,直接上代码:
ProxyManager.cs
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace proxysetting
{
public class ProxyManager
{
[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lPBuffer, int lpdwBufferLength);
private const int INTERNET_OPTION_REFRESH = 0x000025;
private const int INTERNET_OPTION_SETTINGS_CHANGED = 0x000027;
private const string regeditKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
private List<string> proxyLibs = new List<string>();
private void Reflush()
{
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
}
public void Add(string server)
{
this.proxyLibs.Add(server);
}
public void Run()
{
RegistryKey key = Registry.CurrentUser.OpenSubKey(regeditKey, true);
key.SetValue("ProxyServer", String.Join(";", this.proxyLibs.ToArray()));
key.SetValue("ProxyEnable", 1);
key.Close();
this.Reflush();
}
public void Stop()
{
RegistryKey key = Registry.CurrentUser.OpenSubKey(regeditKey, true);
key.SetValue("ProxyEnable", 0);
key.Close();
this.Reflush();
}
}
}
ProxyManager类简单的封装wininet.dll的代理设置接口,和使用注册表文件的区别在于this.Reflush()这个方法,强制刷新代理设置,这样就不用重启IE了.
然后是在Main函数里调用:
Program.cs
namespace proxysetting
{
class Program
{
static void Main(string[] args)
{
var pm = new ProxyManager();
if (args.Length < 1) return;
if (args[0] == "stop")
{
pm.Stop();
}
else
{
for (var i = 0; i < args.Length; i++)
{
pm.Add(args[i]);
}
pm.Run();
}
}
}
}
通过命令行参数来设置代理,可以用空格来设置多个协议的代理,如下:
设置http和https代理,代理ip为127.0.0.1,端口号17173
proxysetting http=127.0.0.1:17173 https=127.0.0.1:17173
nodejs中调用:
exports.setProxy = function () {
var exec = require("child_process").exec;
exec(__dirname + 'proxysetting http=127.0.0.1:17173 https=127.0.0.1:17173');
};
取消代理
proxysetting stop
nodejs中调用:
exports.disProxy = function () {
var exec = require("child_process").exec;
exec(__dirname + 'proxysetting stop');
};
说了那么多,其实就一句话:wininet的this.Reflush方法.
from:http://www.cnblogs.com/honghongming/archive/2014/01/24/3532567.html
【转】使用程序修改系统(IE)代理设置的更多相关文章
- 使用程序修改系统(IE)代理设置
文章都是发布在github再转到这边的,这边格式可能会乱掉.博客地址:benqy.com 这是本人在做的一个前端开发调试工具(HttpMock),功能是web服务器+http日记+http代理(类似f ...
- Java如何查找系统的代理设置?
在Java编程中,如何查找系统的代理设置? 以下示例显示如何使用HttpURLConnection类的systemSetting()方法和getResponse()方法的put方法在系统上查找代理设置 ...
- linux系统环境代理设置
系统上网代理设置: 1.编辑文件/etc/profile,增加如下两行 export http_proxy=http://ip:port export https_proxy=http://ip:po ...
- CentOS:设置系统级代理(转)
原文地址:http://www.cnblogs.com/cocowool/archive/2012/07/05/2578487.html YUM代理设置 编辑/etc/yum.conf,在最后加入 # ...
- 怎样让SoapHttpClientProtocol不使用系统默认代理
方法很简单,但找起来很难. 使用SoapHttpClientProtocol类的Proxy属性. 不能设空值,必须设一个新值. 赶脚底层在链接的时候会判断这个属性是不是null,如果null就会用默认 ...
- BurpSuite 代理设置的小技巧
原文:https://www.anquanke.com/post/id/85925 作者:三思之旅 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 在We ...
- 【技术分享】BurpSuite 代理设置的小技巧
作者:三思之旅 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 在Web渗透测试过程中,BurpSuite是不可或缺的神器之一.BurpSuite的核心是 ...
- Nginx、haproxy反向代理设置
Nginx反向代理配置: #user nobody; worker_processes ; events { worker_connections ; } http { include mime.ty ...
- RedHat中代理设置
YUM代理设置 编辑/etc/yum.conf,在最后加入 # Proxy proxy=http://username:password@proxy_ip:port/ 也可以使用proxy_usern ...
随机推荐
- [javaSE] 看知乎学习反射
简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息. 知乎:学习java应该如何理解反射? 余晖: 反射提供了一种运 ...
- 【公众号转载】超详细 Nginx 极简教程,傻瓜一看也会!
什么是Nginx? Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向代理? 反向代理(Reverse Proxy ...
- Spring Security(二)
Spring Security(二) 注:凡是源码部分,我已经把英文注释去掉了,有兴趣的同学可以在自己项目里进去看看.:-) 定义用户认证逻辑 用户登录成功后,用户的信息会被 Security 封装在 ...
- Android 7.0 以上保留数据去除锁屏密码的方法
在很多情况下,由于我们的疏忽,导致忘记了锁屏密码.也没有开启 USB 调试,内置存储中还有要保留的数据.我们需要在不清除数据的情况下删除锁屏密码.接下来我们就介绍该如何做. 注意事项 首先要注意,这个 ...
- mongodb在线web管理工具
随着云计算,大数据等技术的不断发展,需要服务应用都朝着网络化,在线化的方向演进,数据库管理,数据库维护,数据可视化等也是这种趋势.MonggoDB,MySQL的在线管理,已成为一种强烈的需求,使用Tr ...
- POJ2955(KB22-C 区间DP)
Brackets Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 7823Accepted: 4151 Description We ...
- JQ面试问题(转载)
1 你在公司是怎么用jquery的? 答:在项目中是怎么用的是看看你有没有项目经验(根据自己的实际情况来回答) 你用过的选择器啊,动画啊,表单啊,ajax事件等 配置Jquery环境 下载jquery ...
- 【代码笔记】iOS-MBProgressHUD+MJ
一,效果图. 二,工程图. 三,代码. ViewController.m #import "ViewController.h" #import "MBProgressHU ...
- CSS布局之——对齐方式
一.水平居中: (1). 行内元素的水平居中? 如果被设置元素为文本.图片等行内元素时,在父元素中设置text-align:center实现行内元素水平居中,将子元素的display设置为inline ...
- terminate called after throwing an instance of 'std::bad_alloc'
这个错误,网上搜索到的资料大多是指向内存不足或者内存碎片问题,如下链接 http://bbs.csdn.net/topics/330000462 http://stackoverflow.com/qu ...