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

相关推荐
REDcker12 分钟前
埋点系统设计:从成熟工具到自建方案
运维·服务器·网络·用户分析·埋点·埋点系统
优橙教育1 小时前
通信行业四大热门岗位解析:谁才是数字时代的黄金赛道?
网络·学习·5g
迎仔1 小时前
11-云网络与混合云运维:弹性数字世界的交通管理
网络·安全·web安全
Trouvaille ~1 小时前
【Linux】应用层协议设计实战(二):Jsoncpp序列化与完整实现
linux·运维·服务器·网络·c++·json·应用层
pitch_dark1 小时前
渗透测试系统基础篇——kali系统
网络·安全·web安全
独行soc2 小时前
2026年渗透测试面试题总结-20(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
EmbedLinX2 小时前
嵌入式之协议解析
linux·网络·c++·笔记·学习
凉、介2 小时前
VMware 三种网络模式(桥接 / NAT / Host-Only)原理与实验解析
c语言·网络·笔记·操作系统·嵌入式·vmware
Aliex_git2 小时前
跨域请求笔记
前端·网络·笔记·学习
小白电脑技术2 小时前
飞牛漏洞焦虑?别瞎折腾WAF了!用Lucky五步搞定“防爬墙”
服务器·网络·安全