You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:27:42