使用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

相关推荐
北京耐用通信15 分钟前
无缝衔接·高效传输——耐达讯自动化CC-Link IE转Modbus TCP核心解决方案
网络·人工智能·物联网·网络协议·自动化·信息与通信
亚空间仓鼠36 分钟前
OpenEuler系统常用服务(五)
linux·运维·服务器·网络
聊点儿技术42 分钟前
CDN调度失准导致跨省流量浪费?在GSLB层用IP归属地查询实现精准就近接入
网络·ip·ip归属地查询·ip地址查询·ip离线库·cdn调度
咸鱼嵌入式1 小时前
【AutoSAR】详解PDUR模块
网络
戮戮1 小时前
Spring Cloud Gateway 零拷贝参数校验:一种高性能网关架构实践
java·网络·架构·gateway
[ ]8982 小时前
Stack_MLAG_知识点梳理
网络·笔记·网络协议
上海云盾-小余2 小时前
精准抵御流量攻击:高防 IP + 游戏盾组合部署实战详解
网络·tcp/ip·游戏
盟接之桥2 小时前
盟接之桥®制造业EDI软件,打通全球供应链“最后一公里”,赋能中国制造连接世界
网络·安全·低代码·重构·汽车·制造
江畔何人初2 小时前
TCP的三次握手与四次挥手
linux·服务器·网络·网络协议·tcp/ip
志栋智能2 小时前
超自动化巡检:实现运维“事前预防”的关键拼图
大数据·运维·网络·人工智能·机器学习·自动化