使用QNetworkProxy类简化网络应用的代理支持

  1. QNetworkProxy类的作用

QNetworkProxy为Qt网络类提供代理支持 ,使得网络应用能方便地配置和使用代理,例如Socks5代理。应用可灵活设置代理或禁用其个别套接字。这一类使得Qt网络类,如QAbstractSocket、QTcpSocket等,能够轻松配置和使用代理。代理设计得尽可能透明,使得现有的网络应用程序只需简单改动即可支持网络代理。例如,只需几行代码,你的应用程序就能自动使用Socks5代理连接到指定的主机和端口,并使用用户名和密码进行身份验证。此外,还可以为个别套接字或服务器设置代理,或选择禁用代理。

代理功能的实现
cpp 复制代码
bool GlobalProxy::setSocks5Proxy(const QString &host, quint16 port,
                                const QString &user, const QString &password)
{
    emit logMessage(QString::fromLocal8Bit("正在设置SOCKS5代理..."));

    // 创建SOCKS5代理对象
    m_proxy.setType(QNetworkProxy::Socks5Proxy);
    m_proxy.setHostName(host);
    m_proxy.setPort(port);

    if (!user.isEmpty()) {
        m_proxy.setUser(user);
        m_proxy.setPassword(password);
    }

    // 设置应用程序级代理(影响所有Qt网络连接)
    QNetworkProxy::setApplicationProxy(m_proxy);

    // 禁用系统代理检测,使用我们设置的代理
    QNetworkProxyFactory::setUseSystemConfiguration(false);

    m_isEnabled = true;

    // 保存设置
    saveSettings(host, port, user, password);

    //QString proxyStr = QString("%1:%2").arg(host).arg(port);
   // setupSystemProxy(true, proxyStr);

    emit logMessage(QString::fromLocal8Bit("SOCKS5代理设置成功: %1:%2").arg(host).arg(port));
    return true;
}

void GlobalProxy::clearProxy()
{
    if (!m_isEnabled) return;

    emit logMessage(QString::fromLocal8Bit("正在清除代理设置..."));

    // 设置无代理
    QNetworkProxy noProxy(QNetworkProxy::NoProxy);
    QNetworkProxy::setApplicationProxy(noProxy);

    // 恢复系统代理设置
   // QNetworkProxyFactory::setUseSystemConfiguration(true);

    // 清除系统代理设置
    //setupSystemProxy(false);

    m_isEnabled = false;
    emit logMessage(QString::fromLocal8Bit("代理设置已清除"));
}

1. 哪些连接会走代理

  • ✅ HTTP/HTTPS请求 - QNetworkAccessManager 的所有请求

  • ✅ TCP连接 - 所有QTcpSocket连接

  • ✅ UDP连接 - SOCKS5代理支持UDP转发

  • ✅ WebSocket - QWebSocket 连接

  • ✅ FTP - QFtp 连接(如果使用)

  • ✅ 其他Qt网络类 - 所有基于QAbstractSocket的派生类

例子源码:https://download.csdn.net/download/qq_40110291/92434777

相关推荐
虎头金猫6 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
wuyk5556 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
QYRdata6 天前
年均增速24.2%!机器人数据湖未来六年增长动能强劲
网络·机器人·服务发现
CHENKONG_CK6 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
chshang19926 天前
工业路由器是什么?浅谈5G工业网络中的IR602
网络·物联网·5g·智能路由器
萧瑟余晖6 天前
Netty 核心组件与 Reactor 模型详解
网络·架构
ITxiaobing20236 天前
IP 定位服务选型指南:从准确率到工程落地的技术考察
linux·服务器·网络
wuyk5556 天前
【Socket 进阶之路】第 9 章 Linux 网络服务量产稳定性优化|心跳保活、TIME_WAIT、SO_LINGER、内存池、断线重连、完整异常防护框架
linux·服务器·开发语言·网络·物联网
z落落6 天前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp
云运维笔记6 天前
华为设备IP地址配置全攻略
运维·网络·计算机网络·华为