- 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