本页内容

QNetworkProxyFactory Class

QNetworkProxyFactory 类提供了精细的代理选择功能。更多内容...

头文件: #include <QNetworkProxyFactory>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network

公共函数

QNetworkProxyFactory()
virtual ~QNetworkProxyFactory()
virtual QList<QNetworkProxy> queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery()) = 0

静态公共成员

QList<QNetworkProxy> proxyForQuery(const QNetworkProxyQuery &query)
void setApplicationProxyFactory(QNetworkProxyFactory *factory)
void setUseSystemConfiguration(bool enable)
QList<QNetworkProxy> systemProxyForQuery(const QNetworkProxyQuery &query = QNetworkProxyQuery())
bool usesSystemConfiguration()

详细说明

QNetworkProxyFactory 是对 `QNetworkProxy` 的扩展,允许应用程序根据请求代理的套接字,对使用哪些代理服务器进行更精细的控制。这使得应用程序能够根据协议或目标主机名等条件应用不同的设置。

QNetworkProxyFactory 可以针对应用程序进行全局设置,在这种情况下,它将覆盖通过QNetworkProxy::setApplicationProxy() 设置的任何全局代理。如果进行了全局设置,则使用 Qt XML 创建的任何套接字都会查询该工厂以确定要使用的代理。

在某些支持多连接的框架(例如 `QNetworkAccessManager`)中,也可以设置代理工厂。当在该类对象上设置时,仅由该框架创建的套接字会查询该工厂。

系统代理

您可以配置工厂以使用系统代理的设置。调用setUseSystemConfiguration() 函数并传入 true 可启用此行为,传入 false 则禁用。

同样,您可以通过调用工厂的systemProxyForQuery() 函数,使其直接向系统代理发起查询。

警告:根据 用户系统的配置不同,在某些平台上使用系统代理功能可能会受到限制。systemProxyForQuery() 的文档中列出了受影响平台的这些限制。

成员函数文档

QNetworkProxyFactory::QNetworkProxyFactory()

创建一个 QNetworkProxyFactory 对象。

由于 QNetworkProxyFactory 是一个抽象类,因此无法直接创建 QNetworkProxyFactory 类型的对象。

[virtual noexcept] QNetworkProxyFactory::~QNetworkProxyFactory()

销毁QNetworkProxyFactory 对象。

[static] QList<QNetworkProxy> QNetworkProxyFactory::proxyForQuery(const QNetworkProxyQuery &query)

该函数接收查询请求(query ),分析套接字或请求的详细信息,并返回一个由QNetworkProxy 对象组成的列表,该列表按优先级顺序列出了要使用的代理服务器。

[pure virtual] QList<QNetworkProxy> QNetworkProxyFactory::queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery())

该函数接收查询请求(query ),分析套接字或请求类型的详细信息,并返回一个QNetworkProxy 对象列表,该列表按优先级顺序列出了要使用的代理服务器。

在重写此类时,请确保至少返回一个元素。

如果无法确定更好的代理选项,请使用QNetworkProxy::DefaultProxy ,它会告诉查询代理的代码使用更高级的选项。例如,如果此工厂设置为QNetworkAccessManager 对象,DefaultProxy 将指示其查询应用程序级别的代理设置。

如果将该工厂设置为应用程序代理工厂,则 DefaultProxy 和 NoProxy 将具有相同的含义。

[static] void QNetworkProxyFactory::setApplicationProxyFactory(QNetworkProxyFactory *factory)

将全局代理生成器设置为factory 。该函数将获取该对象的所有权,并在必要时将其删除。

当所有其他代理选择请求均返回QNetworkProxy::DefaultProxy 时,全局代理将作为最后手段被使用。例如,QTcpSocket 对象可通过 QTcpSocket::setProxy 设置代理,但如果未设置代理,则会查询通过本函数设置的代理工厂类。

若通过此函数设置代理工厂,则任何通过QNetworkProxy::setApplicationProxy 设置的应用程序级代理都将被覆盖,且usesSystemConfiguration() 将返回false 。

另请参阅 QNetworkProxy::setApplicationProxy()、QAbstractSocket::proxy() 和QAbstractSocket::setProxy()。

[static] void QNetworkProxyFactory::setUseSystemConfiguration(bool enable)

启用仅使用平台特定的代理设置。更多信息请参阅systemProxyForQuery()。

若在调用此函数时将enable 设置为true ,将重置已设置的任何代理或QNetworkProxyFactory 。

注意: 有关使用系统代理的限制列表,请参阅 systemProxyForQuery() 的文档。

[static] QList<QNetworkProxy> QNetworkProxyFactory::systemProxyForQuery(const QNetworkProxyQuery &query = QNetworkProxyQuery())

该函数接受查询请求 `query`,分析套接字或请求的类型详情,并返回一个 `QNetworkProxy ` 对象列表,该列表按优先级顺序列出了待使用的代理服务器。

该函数可用于确定特定平台的代理设置。如果操作系统提供了相应的库,该函数将使用这些库来确定给定连接的代理;如果不存在此类库,该函数将仅返回一个类型为 `QNetworkProxy::NoProxy` 的 `QNetworkProxy ` 对象。

在 Windows 系统上,该函数将使用 WinHTTP DLL 函数。尽管名称如此,微软建议将其用于所有需要网络连接的应用程序,而不仅仅是 HTTP。该函数将遵循通过 proxycfg.exe 工具在注册表中设置的代理设置。如果找不到这些设置,该函数将尝试获取 Internet Explorer 的设置并加以使用。

在 macOS 上,此函数将使用 Apple 的 CFNetwork 框架获取代理设置。对于包含协议标签“ftp”、“http”和“https”的查询,它将分别应用相应的 FTP、HTTP 和 HTTPS 代理配置。 如果该配置中启用了 SOCKS 代理,此函数将对所有查询使用 SOCKS 服务器。如果未启用 SOCKS,则对所有 TcpSocket 和 UrlRequest 查询将使用 HTTPS 代理。

在已配置支持 libproxy 的系统上,该函数将依赖 libproxy 获取代理设置。根据 libproxy 的配置,这可能会进一步委托给桌面设置、环境变量等。

在其他系统上,该函数将从“http_proxy”环境变量中获取代理设置。该变量必须是一个使用以下方案之一的 URL:“http”、“socks5”或“socks5h”。

限制

这些是该函数当前版本的限制。未来版本的 Qt 可能会解除此处列出的部分限制。

  • 在 Windows 平台上,根据用户系统的配置不同,此函数的执行可能需要几秒钟。

[static] bool QNetworkProxyFactory::usesSystemConfiguration()

返回是否启用了平台特定的代理设置。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.