011. QNetworkProxy類的作用
QNetworkProxy為Qt網絡類提供代理支持,使得網絡應用能方便地配置和使用代理,例如Socks5代理。應用可靈活設置代理或禁用其個別套接字。這一類使得Qt網絡類,如QAbstractSocket、QTcpSocket等,能夠輕鬆配置和使用代理。代理設計得儘可能透明,使得現有的網絡應用程序只需簡單改動即可支持網絡代理。例如,只需幾行代碼,你的應用程序就能自動使用Socks5代理連接到指定的主機和端口,並使用用户名和密碼進行身份驗證。此外,還可以為個別套接字或服務器設置代理,或選擇禁用代理。
代理功能的實現
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的派生類
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。