如何通过WinAPI在C++中程序化配置HTTP(S)代理?
在C++中使用官方WinAPI配置Windows HTTP代理
直接修改注册表配置代理属于非官方推荐的做法,Windows提供了WinINet库中的官方API来程序化配置代理,这种方式会自动同步系统设置,无需手动刷新或重启应用。
核心API说明
主要用到InternetSetOption函数,配合以下关键选项:
INTERNET_OPTION_PROXY:设置代理配置INTERNET_OPTION_SETTINGS_CHANGED:通知系统代理设置已变更INTERNET_OPTION_REFRESH:强制刷新所有应用的代理缓存
完整代码示例
#include <windows.h> #include <wininet.h> #include <iostream> #pragma comment(lib, "wininet.lib") int main() { // 初始化代理配置结构体 PROXYINFO proxyInfo = {0}; proxyInfo.dwSize = sizeof(PROXYINFO); proxyInfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY; proxyInfo.lpszProxy = L"http=127.0.0.1:2000;https=127.0.0.1:2000"; // HTTP/HTTPS代理地址 proxyInfo.lpszProxyBypass = L""; // 空字符串表示所有请求都走代理 // 设置代理配置 BOOL result = InternetSetOption(NULL, INTERNET_OPTION_PROXY, &proxyInfo, sizeof(proxyInfo)); if (!result) { std::cout << "设置代理失败,错误码:" << GetLastError() << std::endl; return 1; } // 通知系统更新设置 result = InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0); if (!result) { std::cout << "通知系统设置变更失败,错误码:" << GetLastError() << std::endl; return 1; } // 强制刷新应用代理缓存 result = InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL, 0); if (!result) { std::cout << "刷新代理设置失败,错误码:" << GetLastError() << std::endl; return 1; } std::cout << "代理配置成功" << std::endl; return 0; }
关键参数说明
dwAccessType:设为INTERNET_OPEN_TYPE_PROXY表示使用指定代理;若要禁用代理,改为INTERNET_OPEN_TYPE_DIRECT即可lpszProxy:格式为http=地址:端口;https=地址:端口,支持分别指定HTTP和HTTPS代理lpszProxyBypass:可设置绕过代理的地址列表,用分号分隔,比如L"localhost;127.0.0.1"表示本地地址不走代理
注意事项
- 需要链接
wininet.lib库(代码中用#pragma comment(lib, "wininet.lib")自动链接) - 该API支持Windows XP及以上所有版本,是官方文档化的标准方法
内容的提问来源于stack exchange,提问作者Joe J
相关产品推荐
相关产品推荐

