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

相关推荐
鹿野素材屋1 天前
技术闲聊:为什么网游会在固定时间点,刷出固定的道具?
前端·网络·unity
TG:@yunlaoda360 云老大1 天前
华为云国际站代理商TaurusDB的读写分离可以应用于哪些场景?
服务器·网络·数据库·华为云
ICT技术最前线1 天前
深信服交换机配置命令教程
网络·交换机·深信服·交换机配置教程
不知道累,只知道类1 天前
[故障复盘] 生产环境 HTTP 连接池耗尽导致的“服务假死”分析
网络·网络协议·http
誰能久伴不乏1 天前
Linux `epoll` 学习笔记:从原理到正确写法(含 ET 经典坑总结)
linux·服务器·网络·c++·ubuntu
init_23611 天前
MPLS option ABC区别
网络
weixin_445476681 天前
Docker 在 Ubuntu(国内网络)安装及问题解决总结
网络·ubuntu·docker
雍凉明月夜1 天前
深度学习网络笔记Ⅰ(CNN)
网络·笔记·深度学习·神经网络·学习·cnn
lkbhua莱克瓦241 天前
TCP通信练习4-上传文件名重复问题
java·网络·网络协议·tcp/ip·tcp
todoitbo1 天前
告别复杂笔记软件!Memos+cpolar,让你的笔记随时随地可用
网络·笔记·内网穿透·cpolar·软件·memos