QNetworkProxyFactory Class

QNetworkProxyFactory 类提供细粒度的代理选择。更多

Header: #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 创建的任何套接字都将查询该工厂,以确定要使用的代理。

在某些支持多连接的框架中也可以设置工厂,例如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 函数。尽管名字叫 WinHTTP,但微软建议将其用于所有需要网络连接的应用程序,而不仅仅是 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()

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

© 2025 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.