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

相关推荐
张3蜂1 小时前
跨站请求伪造(CSRF):原理、攻击与防御全解析
网络·安全·csrf
差点GDP1 小时前
模拟请求测试 Fake Rest API Test
前端·网络·json
buyutang_2 小时前
Linux 网络编程:深度理解网络字节序与主机字节序、大端字节序与小端字节序
linux·运维·网络
姓蔡小朋友3 小时前
Redis网络I/O模型
网络·数据库·redis
量子物理学3 小时前
openssl自建CA并生成自签名SSL证书
网络·网络协议·ssl
成空的梦想3 小时前
除了加密,它还能验明正身:SSL如何防范网络钓鱼?
网络·https·ssl
honsor4 小时前
精准监测 + 实时传输!网络型温湿度传感器,筑牢环境数据管理防线
网络·物联网
专家大圣6 小时前
远程调式不复杂!内网服务器调试用对工具很简单
运维·服务器·网络·内网穿透·cpolar
拾忆,想起7 小时前
Dubbo配置方式大全:七种配置任你选,轻松玩转微服务!
服务器·网络·网络协议·微服务·云原生·架构·dubbo